LeetCode 単独リンク リスト - ソード ポインター オファー II 024. 逆リンク リスト (再帰と反復)

アドレス: 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;
    }
}

おすすめ

転載: blog.csdn.net/m0_62491934/article/details/128739263