您的位置:首页 > 编程语言 > Java开发

LeetCode92之Reverse Linked ListII的 Java题解

2015-05-05 18:06 411 查看
题目

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到n个点,按照前面的思路,我们需要记录第m-1个节点,从m+1个节点到第n个节点依次插入到m-1个节点之后,当m为头节点时,这时候就不存在第m-1个节点,因此我们构造一个fakeNode节点使它的下一个节点就是头节点。

代码:
<strong> </strong>public static ListNode reverseBetween(ListNode head, int m, int n) {
if(head==null||head.next==null||m==n)//链表只有0或1个节点或是只要求反转一个节点,直接返回原表头
return head;
ListNode fakeNode=new ListNode(-1);//头节点之前的一个点
fakeNode.next=head;//它的下一个节点就是头结点
ListNode cur=head;//记录遍历的当前节点
ListNode pre=fakeNode;//用来记录当前节点的前一个节点
int countNum=1;//用来记录链表的第几个几点
while(countNum<=m-1)
{
cur=cur.next;
pre=pre.next;
countNum++;
}
ListNode mNode=cur;//记录第m个节点
cur=cur.next;//cur指向第m+1个点
countNum=m+1;//countNum此时记录到第m+1个节点
ListNode next=null;//保存下一个需要遍历的节点
while(countNum<=n)
{
next=cur.next;//保存下一个需要遍历的节点
cur.next=pre.next;
pre.next=cur;
cur=next;
countNum++;
}
mNode.next=next;//节点m指向节点n+1;
return fakeNode.next;
}
需要注意的一点就是要记录第m个节点,并在反转完成之后,将它指向n+1个节点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: