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

leetcode 【 Reverse Linked List II 】 python 实现

2015-01-08 23:44 609 查看
题目

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.

代码:oj测试通过 Runtime: 65 ms

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
# @param head, a ListNode
# @param m, an integer
# @param n, an integer
# @return a ListNode
def reverseBetween(self, head, m, n):
if head is None or head.next is None:
return head
dummyhead = ListNode(0)
dummyhead.next = head

p = dummyhead

for i in range(m-1):
p = p.next

curr = p.next
for i in range(n-m):
tmp = curr.next
curr.next = tmp.next
tmp.next = p.next
p.next = tmp

return dummyhead.next


思路

不妨拿出四本书,摞成一摞(自上而下为 A B C D),要让这四本书的位置完全颠倒过来(即自上而下为 D C B A):

盯住书A,每次操作把A下面的那本书放到最上面

初始位置:自上而下为 A B C B

第一次操作后:自上而下为 B A C D

第二次操作后:自上而下为 C B A D

第三次操作后:自上而下为 D C B A

小白觉得四本书的例子,貌似可以更有助于解释代码,欢迎大侠拍砖指导。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: