题目描述
For example: Given1->2->3->4->5->nullptr, m= 2 andn= 4,
return1->4->3->2->5->nullptr.
Note: Given m, n satisfy the following condition:1mnlength of list.
解题思路
针对链表题,我基本会设定一个front节点,使得front.next=head.同时对节点p的操作转换为对p.next的操作.这样就不会丢失节点的前驱节点了.
针对这道题,找到m之前的位置,然后做插入操作.
解题代码
public ListNode reverseBetween(ListNode head, int m, int n) {
if(m==n)return head;
ListNode front=new ListNode(0);
front.next=head;//设一个front节点
ListNode p=front;
int i=1;
while(i<m)
{
i++;
p=p.next;
}//p.next为插入位置
ListNode q=p.next;
ListNode r=p.next;//r保存的是尾节点.
ListNode qNext=null;//qNext保存的是q.next
p.next=null;
while(q!=null&&i<=n)
{
qNext=q.next;//qNext保存的是q.next
q.next=p.next;//把q节点插到p.next位置
p.next=q;
q=qNext;
i++;
}
r.next=qNext;//把n后面的元素连到r后面
return front.next;
}