数据结构-链表复习

导读:本篇文章讲解 数据结构-链表复习,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!