用Python实现单链表的复制

今天刷到了一个复制链表的题目 ,具体要求是给定一个单链表,你需要对这个链表进行复制并且返回这个新链表的头节点。

这个的思路我们可以想象成我们用双指针,去遍历给定的链表,然后pre指针用来不断的往后移动,去创建最新的链表,dum指针用来保存最初的头节点,最后因为我们在最开始创建了一个Node(0), 所以我们到最后返回的是dum.next而不是dum,这一点需要注意。

#  这里是单链表的定义
class Node(object):
    def __init__(self, item):
        self.val = item
        self.next = None


def copyList(head):
    cur = head # 当前节点
    pre = Node(0) # 复制新链表的起点
    dum = pre # 我们用dum来保存新链表的首个节点
    while cur:
        node = Node(cur.val) # 复制链表的第一个节点
        pre.next = node # 让新链表的起点指向 第一个节点
        cur = cur.next # 旧链表下一个节点
        pre = node # 新链表下一个节点
    return dum.next # 返回新链表的起点, 不用pre因为pre已经到了链表的最后


if __name__ == "__main__":
    # 这里我们创建一个链表
    a = Node(5)
    b = Node(4)
    c = Node(3)
    a.next = b
    b.next = c
    new_list = copyList(a)
    while new_list:
        print(new_list.val)
        new_list = new_list.next

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值