アドレス: https://leetcode.cn/problems/UHnkqh/
問題解決のアイデア (反復):
リンクされたリストをトラバースするとき、現在のノードの次のポインターを前のノードを指すように変更します。以前のノードである場合、以前のノードを保存する必要があります。参照を変更する前に、後者のノードも格納する必要があり、最後に新しいヘッド参照が返されます。
public class 反转链表_迭代 {
public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val; }
ListNode(int val, ListNode next) {
this.val = val; this.next = next; }
}
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr !=null){
//next是当前节点的指针
ListNode next = curr.next;
//当前节点的指针指向上一个节点 并且存储在变量中.
curr.next = prev;
//上一个节点就是当前节点
prev = curr;
curr = next;
}
//最后
return prev;
}
}
再帰的に実装:
public class 反转链表_递归 {
public class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val; }
ListNode(int val, ListNode next) {
this.val = val; this.next = next; }
}
public ListNode reverseList(ListNode head) {
//为了不陷入死循环
if (head ==null || head.next ==null) return head;
ListNode newHead = reverseList(head.next);
//假如head=5 那么head.next是4 让4的指针指向5
head.next.next = head;
head.next = null;
return newHead;
}
}