单链表的反转(用循环和递归实现单链表反转)
来源:互联网 发布:windows syslog 编辑:程序博客网 时间:2024/05/17 23:03
单链表的反转,首先要考虑,如果链表是空链表或者是一个链表,则不需要反转。其次要考虑反转时,需要三个指针,分别是前一个指针,当前指针,和下一个指针。最后要把头结点指针的指向赋值null,同时头结点指针重新指向前一个指针。分别用非递归和递归实现单链表反转。
循环实现单链表反转:
package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2016年8月23日 */public class ReverseLinkList {/** * @author jcm * 不使用递归,实现链表的反转 * @param head 头指针 * @return 返回新链表的头指针 */public static Node reverseLinkList(Node head){if(head == null || head.next == null){return head;//不需要反转}Node preNode = head;//第一个结点Node currentNode = head.next;//第二个结点Node pNextNode = null;//当前结点的下一个结点while(currentNode != null){pNextNode = currentNode.next;//备份当前结点指向的下一个结点currentNode.next = preNode;//当前结点指向前一个结点,同时当前结点已经不再指向下一个结点preNode = currentNode;//移动前一个结点,指向当前结点currentNode = pNextNode;//当前结点指向下一个结点,同时当前结点已经不再指向前一个结点}head.next = null;//头指针不再指向以前链表的第一个结点head = preNode;//头指针重新指向新链表的第一个结点return head;}
//递归实现单链表反转/** * @author jcm * @param head 头指针 * @return 返回新链表的头指针 */public static Node reverseLinkListRecursion(Node head){if(head == null || head.next == null){return head;}Node pNextNode = head.next;//下一个结点Node recursionNode = reverseLinkListRecursion(pNextNode);//递归pNextNode.next = head;head.next = null;return recursionNode;}}
假设链表是:45 98 56 12 34 1 2 3
结果输出是:3 2 1 34 12 56 98 45
0 0
- 单链表的反转(用循环和递归实现单链表反转)
- 单链表反转的循环及递归实现
- 反转一个单链表的循环和递归实现
- 反转一个单链表的循环和递归实现
- 用两种递归思路与循环实现单链表的反转
- 使用单链表反转的递归和非递归实现方式
- 单链表的反转(递归)
- 单链表反转(递归和非递归)
- 单链表反转(递归和非递归)
- 单链表反转(递归和非递归)
- 单链表反转(递归和非递归)
- java实现单链表反转(递归方式)
- 单链表反转(非递归java实现)
- 单链表反转:递归与非递归实现
- 单链表的反转(非递归)
- 单链表反转的递归方法
- 单链表反转的递归与非递归实现
- 单链表递归反转和非递归翻转
- 服务的用法和开启
- 有五个学生,每个学生有3门课的成绩, 从键盘输入以上数据(包括姓名,三门课成绩), 输入的格式:如:zhagnsan,30,40,60计算出总成绩, 并把学生的信息和计算出的总分数高低顺序存放在磁盘文
- [LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal
- mapreduce的问题
- ./configure 参数解析(一)
- 单链表的反转(用循环和递归实现单链表反转)
- c++构造的理解
- [NOIP2012][CODEVS1218]疫情控制(二分+倍增+贪心)
- 匹配URL的正则表达式解析
- E-R图
- 【链表】【模拟】Codeforces 706E Working routine
- C/C++动态内存分配
- javascript 设计模式 学习笔记(三)--基础(闭包)
- 怎么在Caffe中配置每一个层的结构