单向链表翻转
来源:互联网 发布:基于php的旅游网站 编辑:程序博客网 时间:2024/05/21 10:52
struct linka {int data;linka* next;};void reverse(linka*& head) {if(head ==NULL)return;linka *pre, *cur, *ne;pre=head;cur=head->next;while(cur){ne = cur->next;cur->next = pre;pre = cur;cur = ne;}head->next = NULL;head = pre;}
其中比较难理解的是linka*& head,传入的其实就是linka *的类型就可以了,linka *是表示linka类型的指针,&表示head的引用,而不是地址首先定义3个指针,分别是前中后,然后当中间那个指针非空,就是当前不是空,就做循环里的事情注意的是这个算法里面next是在循环里面赋值的每次循环都把current指向previous了,然后大家都往后移一个,next=current->next必须在current改变方向之前做,否则改变了方向之后current的next就变成previous了.最后跳出循环之后,将header的next首先置空,因为head变成了最后一个node了.然后head就变成了previous,因为当时 current和next都为NULL了,只有previous为最后一个节点(或者说这时候应该是第一个非空节点,也就是head)终于把整个算法理解了一遍,最后想想其实挺简单,但是能用c++写出来也不太容易,特别是在面试的时候.再增加一个递归的单链表反转的方法:1 static link ReverseLink3(link pNode) // using recursion2 {3 if (pNode.next == null)4 return pNode;5 link pNext = pNode.next;6 link head = ReverseLink3(pNext);7 pNext.next = pNode;8 pNode.next = null;9 return head;10 }
0 0
- 翻转单向链表
- 单向链表翻转
- 单向链表翻转
- 翻转单向链表
- 翻转单向链表
- 单向链表翻转问题
- 单向链表的创建及翻转
- 普通单向链表的翻转
- C++单向链表之链表翻转
- 翻转一个单向链表的c语言代码
- 单向链表创建存入数组后翻转
- 面试系列之一:C艹翻转单向链表
- 一个 while 实现 C 翻转单向链表
- 单向链表每k个元素翻转一次。
- 单向链表每k个元素翻转一次。
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- 25. Reverse Nodes in k-Group 怎样不使用额外空间翻转一个单向链表?
- 单向链表的创建、节点删除、链表输出、翻转(写法参考计蒜客数据结构课程)
- String,StringBuffer以及StringBuilder的区别
- 通过cookie保存登录密码
- 苹果AppStore被拒理由大全
- 为什么需要在TypedArray后调用recycle
- X86汇编语言中的registers相关
- 单向链表翻转
- 认识swing技术
- 理解javascript中的回调函数(callback)
- VLC源码分析总结
- 微信使用分享功能遇到的问题
- 实训猜猜看总结
- copy一篇文章,主要看看 cookie 的 path 和 domain
- Codeforces Round #311 (Div. 2)题解
- CentOS下为xxx用户添加sudo 权限