Reverse Linked List II

来源:互联网 发布:软件系统故障处理要求 编辑:程序博客网 时间:2024/05/19 21:15

题目

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

方法

使用4个指针:需要reverse的开始指针以及前一个指针, 需要reverse的结束指针以及后一个指针。
为了方便使用了头结点。
    public ListNode reverseBetween(ListNode head, int m, int n) {        ListNode start = new ListNode(0);        start.next = head;        ListNode reverseStart = null;        ListNode reverseEnd = null;        ListNode pre = start;        ListNode tempStart = null;        ListNode cur = start.next;        int i = 1;        while(cur != null) {            if (i == m) {                reverseStart = cur;            }             if (i == n) {                reverseEnd = cur;                break;            }            if (i < m) {                pre = cur;            }            i++;            cur = cur.next;        }        tempStart = cur.next;                while(reverseStart != reverseEnd) {            cur = reverseStart;            reverseStart = reverseStart.next;            cur.next = tempStart;            tempStart = cur;        }        reverseStart.next = tempStart;        pre.next = reverseStart;                return start.next;    }


0 0
原创粉丝点击