首页 > 其他 > 详细

Reverse Linked List II

时间:2014-06-11 06:06:53      阅读:567      评论:0      收藏:0      [点我收藏+]

题目

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;
    }


Reverse Linked List II,布布扣,bubuko.com

Reverse Linked List II

原文:http://blog.csdn.net/u010378705/article/details/29359813

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!