链表_leetcode92

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

class Solution(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""

if not head or not head.next:
return head
if n < 1 or m >= n :
return head

cout = 1
cur = head



# 还是边界条件没考虑完全呀,比如翻转整个链表

preStart = None
nextEnd = None

while cur:

cur = cur.next

cout += 1

if cout == m-1:
preStart = cur
if cout == n:
nextEnd = cur.next

break


start = preStart.next

begin = start.next

for i in range(m-n):

nextBegin = begin.next
begin.next = preStart.next
preStart.next = begin
begin = nextBegin

start.next = nextEnd

return head



class Solution2(object):
def reverseBetween(self, head, m, n):
"""
:type head: ListNode
:type m: int
:type n: int
:rtype: ListNode
"""

count = 1
root = ListNode(0)
root.next = head

pre = root

# while pre.next:
#
# pre = pre.next
# count += 1
#
# if count == m :
# break

while pre.next and count < m :
pre = pre.next
count += 1

if not pre:
return head


mNode = pre.next
cur = mNode.next

while cur and count < n:

next = cur.next
cur.next = pre.next
pre.next = cur
mNode.next = next

cur = next
count += 1



return root.next








猜你喜欢

转载自www.cnblogs.com/lux-ace/p/10557188.html
今日推荐