您的位置:首页 > 其它

92 Reverse Linked List II

2015-11-21 16:10 423 查看
题目链接: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->NULL, m = 2 and n = 4,

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

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


解题思路:

这道题的考点还是链表就地逆置。没特别的新意。

因为给定的链接没有头结点,当逆置涉及到第一个节点时,操作会较其它有所不同,所以最好自己加上一个头结点。

逆置时,要找到两个最重要的节点。

第一个是,第 m 个结点的前驱。这样能容易地摘下第 m 个结点。

第二个是,第 n 个结点。使被逆置的结点方便地插入到第 n 个结点之后。

代码实现:

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(head == null || head.next == null)
return head;
ListNode headList = new ListNode(0);
headList.next = head;
ListNode p = headList;
int start = m;
while(start -- > 1)
p = p.next;
ListNode q = p;
start = m;
while((n - start) >= 0) {
q = q.next;
start ++;
}
while(p.next != q) {
ListNode tmp = p.next;
p.next = tmp.next;
tmp.next = q.next;
q.next = tmp;
}
return headList.next;
}
}


44 / 44 test cases passed.
Status: Accepted
Runtime: 0 ms
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: