【Leetcode】Reverse Linked List II

来源:互联网 发布:数据交易呢主体 编辑:程序博客网 时间:2024/06/08 03:29

题目链接:https://leetcode.com/problems/reverse-linked-list-ii/

题目:

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.

思路:

思路简单,直接做就好了。主要要注意如果加头结点可以简化算法。

算法:

public ListNode reverseBetween(ListNode head, int m, int n) {if (head == null)return null;ListNode newHead = new ListNode(0);newHead.next = head;// start/head~rear/end,反转head到rear之间的结点,start/end是反转区间两个结点ListNode rear = head, start = newHead, end = head.next;m = m - 1;while (m-- > 0)//因为start是从头结点开始算,所以要多走一步,即m--,而不是像下面的--nstart = start.next;head = start.next;while (--n > 0)rear = rear.next;end = rear.next;// ===反转 head到rear之间结点ListNode p = head, q, t;q = p.next;while (p != rear) {t = q.next;q.next = p;p = q;q = t;}// === start.next = rear;head.next = end;return newHead.next;}



0 0
原创粉丝点击