欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

C语言实现单链表逆序与逆序输出实例

来源:本站原创|时间:2020-01-10|栏目:C语言|点击:

单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序;另一种是把链表逆序。本文就分别实例讲述一下两种方法。具体如下:

1.逆序输出

实例代码如下:

#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;

typedef struct node{
 int data;
 node * next;
}node;

//尾部添加
node * add(int n, node * head){
 node * t = new node;
 t->data = n;
 t->next = NULL;
 if (head == NULL){
  head = t;
 }
 else if (head->next == NULL){
  head->next = t;
 }
 else{
  node * p = head->next;
  while (p->next != NULL){
   p = p->next;
  }
  p->next = t;
 }
 return head;
}

//顺序输出
void print(node * head){
 node * p = head;
 while (p != NULL){
  cout << p->data << " ";
  p = p->next;
 }
 cout << endl;
}

//递归
void reversePrint(node * p){
 if (p != NULL){
  reversePrint(p->next);
  cout << p->data << " ";
 }
}

//栈
void reversePrint2(node * head){
 stack<int> s;
 while (head != NULL){
  s.push(head->data);
  head = head->next;
 }

 while (!s.empty()){
  cout << s.top() << " ";
  s.pop();
 }
}

int main(){

 node * head = NULL;
 for (int i = 1; i <= 5; i++){
  head = add(i, head);
 }
  print(head);
  reversePrint(head);
  reversePrint2(head);
 system("pause");
  return 0;
}

逆序输出可以用三种方法: 递归,栈,逆序后输出。最后一种接下来讲到。

2.单链表逆序

实例代码如下:

#include<iostream>
#include<stack>
#include<assert.h>
using namespace std;


typedef struct node{
 int data;
 node * next;
}node;

node * add(int n, node * head){
 node * t = new node;
 t->data = n;
 t->next = NULL;
 if (head == NULL){
  head = t;
 }
 else if (head->next == NULL){
  head->next = t;
 }
 else{
  node * p = head->next;
  while (p->next != NULL){
   p = p->next;
  }
  p->next = t;
 }
 return head;
}

//循环
node * reverse(node * head){

 if (head == NULL || head->next == NULL){
  return head;
 }

 node * p1 = head;
 node * p2 = head->next;
 node * p3 = NULL; 
 head->next = NULL;

 while (p2 != NULL){
  p3 = p2;
  p2 = p2->next;
  p3->next = p1;
  p1 = p3;
 }
 head = p1;
 return head;
}

void print(node * head){
 node * p = head;
 while (p != NULL){
  cout << p->data << " ";
  p = p->next;
 }
 cout << endl;
}


//递归
node * reverse2(node * p){
 if (p == NULL || p->next == NULL){
  return p;
 }

 node * newHead = reverse2(p->next);
 p->next->next = p;
 p->next = NULL;
 return newHead;
}


int main(){

 node * head = NULL;
 for (int i = 1; i <= 5; i++){
  head = add(i, head);
 }
 print(head);
 head = reverse(head);
 print(head);
 head = reverse2(head);
 print(head);

 system("pause");
 return 0;
}

这里链表逆序用了两种方法:循环,递归。读者最容易理解的方法就是在纸上自己画一下。

希望本文所述实例对大家的数据结构与算法学习能有所帮助。

上一篇:16种C语言编译警告(Warning)类型的解决方法

栏    目:C语言

下一篇:C++输入输出注意事项总结

本文标题:C语言实现单链表逆序与逆序输出实例

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3458.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有