leetcode------Reverse Linked List II

标题:Reverse Linked List II
通过率:26.2%
难度:中等

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.

单链表的逆序,遍历一遍全部逆序完成,本题不是全部逆序,是部分逆序。只用记录逆序开始点和结束点即可逆序过程如下图:

初始状态:

head->next = prev;

prev = head;

head = next;

next = head->next

第一次结束,如上图。

整个过程是一个循环的过程,如下图:

 

具体代码如下:

 1 class Solution:
 2     def reverseBetween(self, head, m, n):
 3         diff, dummy, current= n - m, ListNode(0), head
 4         dummy.next = head
 5         last_unswapped = dummy
 6         while current != None and m > 1:
 7             current, last_unswapped, m = current.next, current, m - 1
 8         prev, first_swapped = last_unswapped, current
 9         while current != None and diff >= 0:
10             tmp = current.next
11             current.next = prev
12             prev = current
13             current = tmp
14             diff -= 1
15         last_unswapped.next, first_swapped.next = prev, current
16         return dummy.next

 

转载于:https://www.cnblogs.com/pkuYang/p/4421520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值