leetcode 86. 分隔链表
解题重点: 1.创建两个新链表头来牵引
class Solution:
def partition(self, head: ListNode, x: int) -> ListNode:
big_head = ListNode()
small_head = ListNode()
cur = head
big_pre = big_head
small_pre = small_head
while cur:
if cur.val >= x:
big_pre.next = cur
big_pre = cur
else:
small_pre.next = cur
small_pre = cur
cur = cur.next
big_pre.next = None
small_pre.next = big_head.next
return small_head.next
leetcode 138. 复制带随机指针的链表
解题重点: 1.将复制的链表先保存在原链表,保持原链表的相对关系 2.理解为啥random可以直接random.next,然后复制的链表的random关系就对 齐了3.注意next.next时的判定
难点在于复制随机指针。
这里可以使用一个小技巧对节点进行复制:
将原本的 复制成 。
然后将复制节点中的随机指针域向后推进一格,这样复制节点的随机指针
域,就指向了随机指针的复制节点。
最后将复制的节点拆下来即可。
class Solution:
def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':
if not head: return
pre = head
while pre:# 复制链表
q = Node(pre.val,pre.next, pre.random) # 新建链表节点
#q.next = pre.next
# q.random = pre.random
pre.next = q
pre = pre.next.next
pre = head.next
while pre:
if pre.random:
pre.random = pre.random.next
pre = pre.next
if pre:
pre = pre.next
pre = head.next
new_head = head.next
while pre.next:
head.next = head.next.next
pre.next = pre.next.next
head = head.next
pre = pre.next
head.next = None
return new_head
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76902.html