1. 程式人生 > >反轉鏈表 Reverse Linked List II

反轉鏈表 Reverse Linked List II

圖片 描述 經典的 new 完全 節點 每次 ever link

2018-09-11 22:58:29

問題描述:

技術分享圖片

問題求解:

反轉鏈表一直是一個很經典的問題,本題中其實是最經典的全局反轉的一個改進和加深,本題的求解思路完全可以套用到全局反轉中。

本題實際使用的思路是一種插入的思路,維護了三個指針prev,cur,then。

prev : 初始位置的前一個位置,始終不變,後續就是在prev後進行插入;

cur : 不斷叠代,指向需要插入的節點的前一個位置;

then : cur的下一個節點,是每次需要進行插入的節點,同時需要不斷叠代。

    public ListNode reverseBetween(ListNode head, int m, int n) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode prev = dummy;
        ListNode cur = dummy;
        ListNode then = null;
        for (int i = 0; i < m; i++) {
            prev = cur;
            cur = cur.next;
            then = cur.next;
        }
        for (int i = 0; i < n - m; i++) {
            cur.next = then.next;
            then.next = prev.next;
            prev.next = then;
            then = cur.next;
        }
        return dummy.next;
    }

反轉鏈表 Reverse Linked List II