c++实现单链表逆序
2016-11-22 13:58
309 查看
struct Node { int x; Node * next; Node(int x1,Node * next1) { x = x1; next = next1; } }; Node * Inverted(Node * head) { Node * movepo = head;//标记原链表需要移动的节点 Node * Movenext = nullptr; Node * pp = nullptr; while (movepo->next != nullptr) // { Node * next = movepo->next; movepo->next = Movenext; // 代码1 --原链表的第一个位置为新链表的最后一个位置 所以一开始初始化为nullptr if(next->next == nullptr) //代码3 { pp = movepo; } Movenext = movepo; // 代码2 代码1,2的功能是记录新链表的第一个位置的next head = next; movepo = next; } movepo->next = pp; //代码4 代码 3,4 即原来链表执行到最后一个位置时将原链表与新组合成的链表串联起来 return movepo; }
//mian里的一个简单的小测试 Node* a1 = new Node(7,nullptr);Node* a2 = new Node(6,a1);Node* a3 = new Node(5,a2);Node* a4 = new Node(4,a3); Node* a5 = new Node(3,a4);Node* a6 = new Node(2,a5);Node* a7 = new Node(1,a6); Node * head = a7; while (head != nullptr) { printf("my number:%d",head->x); head = head->next; } Node * p1 = Inverted(a7); while (p1 !=nullptr) { printf("my Inverted:%d",p1->x); Node * p11 = p1; p1 = p1->next; delete p11; }
代码说明很详细 简单的说下逆序中while的执行流程 假设 一个链表 p1->p2->p3->p4->p5->nullptr while 执行第一次之后会是 p2->p3->p4->p5->nullptr 和 p1->nullptr 执行第二次后会是 p3->p4->p5->nullptr 和 p2->p1->nullptr ....... 跳出while循环 会成为 p5->nullpter 和 p4->p3->p2->p1->nullptr 再执行代码 movepo->next = pp; 串联起来 成为 p5->p4->p3->p2->p1->nullptr
相关文章推荐
- 【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- C++ 递归和非递归实现链表逆序
- C++实现链表逆序
- 【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- C++实现链表逆序打印、链表反转
- 双向循环链表的头插、中插、尾插、删除、逆序顺序显示(C++实现)
- [转]链表的逆序实现
- 双向循环链表删除算法的C++程序实现
- C++实现线形链表
- C++版-----链表实现
- C++基于链表泛型集合类的实现
- VC++编译问题汇总1 单链表的表示和实现,基于c++
- 链表的逆序实现
- C/C++用递归的方法求链表逆序
- C++链表实现堆栈:LinkList:Build a linklist using C++ class Stack
- 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
- 双向循环链表插入算法的C++程序实现
- c++实现单向链表反转的学习总结
- C/c++语言,求单向链表的逆序_普通方法_header+p+q工作指针
- C++链表实现