链表相关编程题总结

1、复制带随机指针的链表

class Solution(object):
    def copyRandomList(self, head):
        """
        :type head: Node
        :rtype: Node
        """
        if head is None:
            return None
        p = head
        while p:
            node = Node(x=p.val, next=p.next)
            p.next = node
            p = p.next.next
        p = head
        while p:
            if p.random:
                p.next.random = p.random.next
            else:
                p.next.random = None
            p = p.next.next
        p = head.next
        head = p
        while p.next:
            p.next = p.next.next
            p = p.next
        return head

原文地址:https://www.cnblogs.com/weswes/p/12078923.html

时间: 2024-07-31 02:03:06

链表相关编程题总结的相关文章

【常用算法思路分析系列】链表相关高频题集

本文是[常用算法思路分析系列]的第四篇,总结链表相关的高频题目和解题思路.本文分析如下几个问题:1.环形链表的差值问题:2.只能访问单个结点的删除问题:3.链表的分化:4.打印两个链表的公共部分:5.把链表的每k个结点逆序:6.删除链表中指定结点:7.判断链表是否为回文结构:8.复杂链表的复制:9.判断链表是否有环:10.判断两个无环链表是否相交:11.判断两个有环链表是否相交:12.判断两个链表(状态未定)是否相交. 本系列前三篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析

链表相关算法题总结 1

链表题目对算法的要求度不高,但实际写的过程中需要注意语言细节,考虑精细度的地方很多. 1.链表结构与基本操作 1.1 添加节点 一般情况: cur ->next = prev ->next; prev ->next = cur; 表头插入: cur ->next = head; head = cur; 1.2删除节点 一般情况:(已知待删除节点的前驱节点) ListNode* temp = prev->next; prev->next = prev->next-&

【常用算法思路分析系列】与二分搜索相关高频题

本文是[常用算法思路分析系列]的第五篇,总结二分搜索相关的高频题目和解题思路.本文分析如下几个问题:1.求数组局部最小值问题:2.元素最左出现的位置:3.循环有序数组求最小值:4.最左原位:5.完全二叉树计算结点数:6.快速N次方. 本系列前四篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析系列]字符串高频题集 [常用算法思路分析系列]栈和队列高频题集(修改版) [常用算法思路分析系列]链表相关高频题集 二分搜索的重要提醒: 一般我们选择中点进行搜索,会写成mid = (lef

剑指Offer_编程题_从尾到头打印链表

题目描述 输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 创建链表相关,头插法和尾插法 关于头插法,可以next可以理解成前一个节点地址,插入顺序: 1.头节点传入,开始创建A数据,头节点的next指向A数据的内存地址,A节点的next替换成头节点的 2.头节点再传入,创建B数据,头节点的next又换成了指向B的内存地址,B节点的next替换头节点的A: 总结一下:插入时候,一直在头节点的上面插入数据,原来的数据被“顶”上去了: 头插法遍历的时候,头节点开始,一个一个往上遍历.这

挑战编程题(三)

接 挑战编程题(二)http://www.cnblogs.com/qiange/p/5090588.html 题目: 有两个非负数的链表,每个链表都反序的存储一个多位数字的每一位,(例如:链表2->4->3  数字342),现在求两个链表数字的相加,求和的链表. 例如: Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 /** * Definition for singly-linked lis

算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/5882357.html.看了下,挺有意思,于是就想了想,又写了写,最终撸出来了.刚开始一看顿时感觉很熟悉,大学数据结构和算法课肯定讲过相关东西,什么深度搜索,广度搜索,最优路径,最优解...但是现在你让我说个一二三,我还就只记住几个名字,说不定名字都记错.我向来不喜欢死记东西,能查到的真的不想背下来,而

滴滴出行秋招编程题

算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题. 只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/5882357.html.看了下,挺有意思,于是就想了想,又写了写,最终撸出来了.刚开始一看顿时感觉很熟悉,大学数据结构和算法课肯定讲过相关东西,什么深度搜索,广度搜索,最优路径,最优解...但是现在你让我说个一二三,

2. Python面试编程题汇总

编程题 1 台阶问题/斐波纳挈 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. fib = lambda n: n if n <= 2 else fib(n - 1) + fib(n - 2) 第二种记忆方法 def memo(func): cache = {} def wrap(*args): if args not in cache: cache[args] = func(*args) return cache[args] return wrap

POJ C++程序设计 编程题#4 字符串操作

编程题#4: 字符串操作 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个字符串(从1开始编号),每个字符串中的字符位置从0开始编号,长度为1-500,现有如下若干操作: copy N X L:取出第N个字符串第X个字符开始的长度为L的字符串. add S1 S2:判断S1,S2是否为0-99999之间的整数,若是则将其转化为整数做加法,若不是,则作字符串加法,返回