C语言实现单链表逆序与逆序输出实例
来源:互联网 发布:java和c语言哪个简单 编辑:程序博客网 时间:2024/05/07 19:05
这篇文章主要介绍了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;}
这里链表逆序用了两种方法:循环,递归。读者最容易理解的方法就是在纸上自己画一下。
希望本文所述实例对大家的数据结构与算法学习能有所帮助。
0 0
- C语言实现单链表逆序与逆序输出实例
- c语言实现字符串的逆序输出
- 用c语言实现单链表的逆序输出
- 【面试算法系列】逆序输出一个单链表 - C语言实现
- C语言 逆序输出单链表(递归)
- 关于c语言逆序输出
- 【C语言】逆序输出字符串
- C语言——实例029 逆序输出
- C语言——实例040 数组逆序输出
- C语言单链表逆序
- C语言简单递归实现字符串逆序输出
- C语言实现对字符串的逆序输出
- c语言实现字符串逆序
- C语言实现逆序数
- 单链表实现字符串逆序输出
- c语言 逆序 输出文件内容
- C语言逆序输出某个数字
- C语言关于字符串逆序输出---面试
- Java代理模式 动态代理 的应用场景
- JQuery 验证插件validate的showErrors参数的使用
- 排序算法(三)——冒泡排序
- sql 重置数据库自增字段
- Android FinalDb使用
- C语言实现单链表逆序与逆序输出实例
- ELK遇到的故障或小难点
- A. Again Twenty Five
- 【网络】多线程--NSThread、GCD、NSOperationQueue
- 20个高级Java面试题汇总
- Objective-C总Runtime的那点事儿(一)消息机制
- 南阳题目25-A Famous Music Composer
- HashMap实现原理分析
- Coin Change