单链表逆序或者逆序输出
2014-08-22 17:42
281 查看
分为两种情况,一种是只逆序输出,实际上不逆序;另一种是把链表逆序。
********************逆序输出***********************
逆序输出可以用三种方法: 递归,栈,逆序后输出。最后一种接下来讲到。
*********************单链表逆序********************
这里链表逆序用了两种方法:循环,递归。理解的方法是在纸上自己画一下。
********************逆序输出***********************
#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; }
逆序输出可以用三种方法: 递归,栈,逆序后输出。最后一种接下来讲到。
*********************单链表逆序********************
#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; }
这里链表逆序用了两种方法:循环,递归。理解的方法是在纸上自己画一下。
相关文章推荐
- 单链表逆序或者逆序输出
- C语言实现单链表逆序与逆序输出实例
- 删除链表中的重复节点、剩余节点逆序输出
- 逆序输出链表元素
- 链表的逆序输出
- 逆序输出单链表结点值
- 正序逆序生成单链表,正序逆序输出链表(递归法和顺序栈法)
- 链表的建立、输出、逆序
- 单链表[建表、输出、插入、删除、逆序]
- 【链表】逆序输出单链表(单链表反转)
- 链表的逆序输出
- 【数据结构_链表_List_0957】逆序输出链表
- 剑指offer例题5—逆序输出链表
- 链表逆序输出(递归妙)
- 链表的插入、删除、逆序打印、输出倒数第N个、链表逆序
- C语言实现单链表逆序与逆序输出实例
- 链表元素的逆序输出
- 剑指Offer03 逆序输出链表&链表逆序
- 单链表逆序输出C++ (stack方法、双向链表方法以及vector方法)
- 单向链表逆序输出