思路:待续!
package com.fjx.learn;
public class Node {
public int data;
public Node next;
public Node(int data, Node next) {
this.data = data;
this.next = next;
}
public int getData() {
return data;
}
}
package com.fjx.learn;
public class RevserLinkList {
public static void main(String[] args) {
// 初始化单链表
Node node5=new Node(5,null);
Node node4=new Node(4,node5);
Node node3=new Node(3,node4);
Node node2=new Node(2,node3);
Node node1=new Node(1,node2);
// 调用反转方法
//Node reverse=reverse(node1);
Node reverseOther = reverseOther(node1);
}
/**
*单链表反转
* @param list 为传入的单链表
* @author 冯佳兴
* @date 2020/02/16 19:56
*/
public static Node reverse(Node list){
// 定义 current 为当前链表,afterReverse 为转换之后的新链表,初始为 null
Node current=list, afterReverse=null;
// 当前链表不为空,进行反转操作
while (current!=null){
// 1. 保存当前节点的 next 指针指向的链表
Node next=current.next;
// 2. 将当前节点的 next 指针指向反转之后的新链表
current.next=afterReverse;
// 3. 保存当前的链表状态到新链表中
afterReverse=current;
// 4. 将当前节点指针后移一位,进行下一次循环
current=next;
}
return afterReverse;
}
public static Node reverseOther(Node list){
if (list == null || list.next == null) return list;
Node next = reverseOther((list.next));
list.next.next = list;
list.next = null;
return next;
}
}
本文深入探讨了单链表的两种反转方法:迭代法和递归法。通过实例演示了如何实现链表的反转,并详细解释了每一步的操作过程。对于理解链表数据结构及其操作具有较高的参考价值。

被折叠的 条评论
为什么被折叠?



