链表_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








转载于:https://www.cnblogs.com/lux-ace/p/10557188.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值