LeetCode92-反转链表 II
最近全国疫情严重,待在家里没事干,马上又要准备春招了,最近刷刷题,记录一下!再说一句,武汉加油,大家出门记得戴口罩!
1、题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
2、思路
3、代码
c++
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(m==n) return head;
auto dummy=new ListNode(-1);
dummy->next=head;
auto a=dummy;
auto d=dummy;
for(int i=0;i<m-1;i++) a=a->next;
for(int i=0;i<n;i++) d=d->next;
auto b=a->next;
auto c=d->next;
//第一步
for(auto p=b,q=b->next;q!=c;)
{
auto o=q->next;
q->next=p;
p=q;
q=o;
}
//第二步
b->next=c;
a->next=d;
return dummy->next;
}
};
Java
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
if(m==n) return head;
ListNode dummy=new ListNode(-1);
dummy.next=head;
ListNode a=dummy;
ListNode d=dummy;
for(int i=0;i<m-1;i++) a=a.next;
for(int i=0;i<n;i++) d=d.next;
ListNode b=a.next;
ListNode c=d.next;
//第一步
for(ListNode p=b,q=b.next;q!=c;)
{
ListNode o=q.next;
q.next=p;
p=q;
q=o;
}
//第二步
b.next=c;
a.next=d;
return dummy.next;
}
}