标签:node pre None 单向 pos next 链表 算法 节点
思路:
1) 先判断 0<m<=n <= size,不满足直接返回原来的 头节点
2) 先找到 m的前一个节点 m_pre 和 n的后一个节点 n_pos. 把反转的部分反转之后。连接m_pre 和 n_pos.
3) 如果m_pre为null,说明反转的部分包含 头结点,则返回新的头结点,也就是 n. 如果m_pre不为null,则返回旧的头结点。
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param head ListNode类
# @param m int整型
# @param n int整型
# @return ListNode类
#
class Solution:
def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
# write code here
if m <0 or m>n or n >1000:
return head
current_len = 0 # 当前位置
node = head
m_pre = None
n_pos = None
while node is not None:
current_len += 1
if current_len == m-1:
# 判断当前 节点是不是 m_pre节点
m_pre = node
if current_len == n + 1:
# 判断当前节点 是不是 n_pre节点
n_pos = node
break
node = node.next
# 用node变量保存开始反转的节点。
if m_pre is None:
# 如果m_pre 是 None,说明 m是头结点,
node = head
else:
# m_pre不是None, m不是头节点 ,开始反转的节点是m_pre.next
node = m_pre.next
# node 是 循环的前一个节点 变量
# node2 是当前节点
# next 是当前节点的下一个节点, 每次循环更新这三个变量
# 从下一个节点开始,node是前一个节点。
node2 = node.next # 3 。
node.next = n_pos # 开始反转的节点的下一个 节点连接 n_pos , 2 > 5
next = None # next变量
while node2 != n_pos:
# 遍历到 n_pos节点
next = node2.next # 保存当前node的next
node2.next = node # 将当前节点的下一个改为 前一个节点。
node = node2 # 当前节点 更新为 前一个节点
node2 = next # 更新当前节点
if m_pre is not None:
# 不是 从头节点开始。 返回原来的头节点 head . 把 1 > 4
m_pre.next = node # 反转结束后。 node已经变成 4 了。
return head
return node
标签:node,pre,None,单向,pos,next,链表,算法,节点 来源: https://www.cnblogs.com/clllll/p/16380470.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。