博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]题解(python):138-Copy List with Random Pointer
阅读量:5905 次
发布时间:2019-06-19

本文共 1495 字,大约阅读时间需要 4 分钟。

这道题目不是太懂,参考了http://www.cnblogs.com/zuoyuan/p/3745126.html的博客。

题意:

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.

解题思路:这题主要是需要深拷贝。看图就明白怎么写程序了。

 

首先,在原链表的每个节点后面都插入一个新节点,新节点的内容和前面的节点一样。比如上图,1后面插入1,2后面插入2,依次类推。

其次,原链表中的random指针如何映射呢?比如上图中,1节点的random指针指向3,4节点的random指针指向2。如果有一个tmp指针指向1(蓝色),则一条语句:tmp.next.random = tmp.random.next;就可以解决这个问题。

第三步,将新的链表从上图这样的链表中拆分出来。

代码(python):

# Definition for singly-linked list with a random pointer.# class RandomListNode(object):#     def __init__(self, x):#         self.label = x#         self.next = None#         self.random = Noneclass Solution(object):    def copyRandomList(self, head):        """        :type head: RandomListNode        :rtype: RandomListNode        """        if head == None : return head        tmp = head        while tmp:            newNode = RandomListNode(tmp.label)            newNode.next = tmp.next            tmp.next = newNode            tmp = tmp.next.next        tmp = head        while tmp:            if tmp.random:                tmp.next.random = tmp.random.next            tmp = tmp.next.next        newhead = head.next        pold,pnew = head,newhead        while pnew.next:            pold.next = pnew.next            pold = pold.next            pnew.next = pold.next            pnew = pnew.next        pold.next = None        return newhead
View Code

 

转载于:https://www.cnblogs.com/chruny/p/5363879.html

你可能感兴趣的文章
一点一点学架构(四)—Spring.NET错误Cannot Resolve Type……
查看>>
线段树基础
查看>>
Maven传递依赖的时候,同名包不同版本号的包均会下载,可是编译的时候,仅仅会载入一个高版本号的。...
查看>>
Qt的Socket数据通讯的一个样例。
查看>>
hdu5396 Expression 区间dp +排列组合
查看>>
Java OCR tesseract 图像智能字符识别技术
查看>>
用Java开发50个棋类游戏
查看>>
Source Insight 源代码查看工具
查看>>
clang: error: linker command failed with exit code 1 (use -v to see invocation)
查看>>
windows server2012部署apache项目访问后台管理系统时tomcat就停了是怎么回事
查看>>
viewpager切换耗时控制
查看>>
Java的三种代理模式
查看>>
(转)log4j(七)——log4j.xml简单配置样例说明
查看>>
labview程序性能优化
查看>>
Spark调研笔记第6篇 - Spark编程实战FAQ
查看>>
8.5 filecmp--文件和文件夹比較处理
查看>>
IE6下position:fixed不支持问题及其解决方式
查看>>
iOS Animation具体解释
查看>>
Selenium:集成测试报告
查看>>
<html>
查看>>