Umkehrung der verknüpften Liste (LeetCode206
Idee:
Methode 1: Definieren Sie einen virtuellen Knoten,
durchlaufen Sie die verknüpfte Liste und fügen Sie die Elemente der verknüpften Liste nacheinander in den Kopf-> Nächsten des virtuellen Knotens ein.
Code:
public static Node linkedListReverse(Node node ){
//创建虚拟节点
Node node1 = new Node(-1); //-1 null
Node cur = node; // 1 2 3 4
while (cur!=null){
//获取原链表的的next
Node next = cur.next; //2 3 4 3 4
//获取原链表的头节点指向虚拟节点的next
cur.next = node1.next; //1 null 2
//虚拟节点的next指向拼接的好的链表
node1.next = cur;//-1 1
cur = next; //2 3 4
}
return node1.next;
}
Methode 2: Bedienen Sie die verknüpfte Liste direkt, um eine Umkehrung zu erreichen
Code:
//直接操作数组实现
public static Node reverseList(Node node ){
Node pre = null;
Node cur = node;
while (cur!=null){
Node next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
Eigentlich gibt es keinen großen Unterschied zwischen den beiden Methoden, es geht lediglich um neue oder nicht neue Objekte.
Methode 3: Verwenden Sie zur Implementierung die Rekursion
Code:
//递归实现
public static Node recurtionList(Node node ){
if(node ==null || node.next==null){
return node;
}
Node newNode = recurtionList(node.next);
node.next.next = node;
node.next = null;
return newNode;
}