JAVA单链表反转
2017-12-20 20:55
211 查看
非递归的方法,直接代码:
递归时,遍历到最后一个节点,往前逐个更新链条即可
//递归方式
public static Node reverseLinkedNodeOne(Node node) {
if (null == node || null == node.next) {
return node;
} else {
Node curNext = reverseLinkedNodeOne(node.next);
node.next.next = node;
node.next = null;
return curNext;
}
}
class Node { public int value; public Node next; public Node() { } public Node(int value) { this.value = value; } } public class ReverseLinkedNode { public static void main(String[] args) { Node node1 = new Node(1); Node node2 = new Node(4); Node node3 = new Node(2); Node node4 = new Node(0); node1.next = node2; node2.next = node3; node3.next = node4; printAllNode(node1); Node newHead = reverseLinkedNode(node1); printAllNode(newHead); } public static void printAllNode(Node node){ while(null != node){ System.out.println(node.value); node = node.next; } } public static Node reverseLinkedNode(Node node){ if(null == node || null == node.next){ return node; } Node curNode = node.next; //注意头结点要更新为空 node.next = null; Node nextNode = null; while(null != curNode){ //暂存当前待处理节点的下一个,防止链条断了 nextNode = curNode.next; //当前待处理节点指向当前的头结点 curNode.next = node; //当前的头结点更新为上面的当前待处理节点 node = curNode; //上面的当前待处理节点更新为上面暂存的下一个,如此循环到终点 curNode = nextNode; } return node; } }
递归时,遍历到最后一个节点,往前逐个更新链条即可
//递归方式
public static Node reverseLinkedNodeOne(Node node) {
if (null == node || null == node.next) {
return node;
} else {
Node curNext = reverseLinkedNodeOne(node.next);
node.next.next = node;
node.next = null;
return curNext;
}
}
相关文章推荐
- Java单双链表的创建、反转与递归反转
- 单链表反转--java版
- 《剑指offer》牛客网java题解-反转链表
- java 输入一个链表,反转链表后,输出链表的所有元素。
- java实现链表的反转
- 反转链表(不改变指针)JAVA版
- 单链表反转--Java实现
- Java数据结构之链表反转
- Java:如何实现链表的反转
- Java单链表基本操作(四)--单链表反转
- Java反转链表方法
- 反转链表 - java和rust的不同实现
- 单链表反转(递归和非递归) (Java)
- 反转单向链表(JAVA)
- 数据结构与算法(2)---Java语言实现:线性表的单链表定义:方法补充,实现单链表反转,去重
- java之链表反转
- Java实现单向链表反转
- 【Java数据结构】Java数据结构之链表反转
- 【Java数据结构】Java数据结构之链表反转
- Java单链表反转 Java实现单链表翻转