您的位置:首页 > 编程语言 > Java开发

JAVA单链表反转

2017-12-20 20:55 211 查看
非递归的方法,直接代码:

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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: