随笔分类 - Python算法相关
学习Python程序员面试算法,代码实现
摘要:判断两个无环单链表是否交叉 题目描述: 如上图,这两个链表相交于结点5,要求判断两个链表是否相交,如果相交,找出相交处的结点。 解题思路: 方法一:Hash 法 如上图所示,如果两个链表相交,那么它们一定会有公共的结点,由于结点的地址或引用可以作为结点的唯一标识,因此,可以通过判断两个链表中的结点是
阅读全文
摘要:只给单链表中要某节点处的指针的情况下删除该节点 题目描述: 假设给定链表 1 2 3 4 5 6 7 中指向第5个元素的指针,要求把结点5删掉,删除后链表变为1 2 3 >4 6 7 思路分析: 1.如果这个结点是链表的最后一个结点,那么无法删除这个结点。 2.如果这个结点不是链表的最后一个结点,可
阅读全文
摘要:合并两个有序链表 解题思想: 分别用l1,l2遍历两个链表,如果l1.data小于l2.data,则将l1归入合并后的链表,l1=l1.next;反之将l2归入合并后的链表,l2=l2.next;如果其中一个链表遍历结束,则将没遍历完的另一链表的剩下部分归入合并后的链表 代码实现: coding:u
阅读全文
摘要:单链表以k个节点为一组进行翻转 解题思路: 首先把前K个结点看成一个子链表,采用前面介绍的方法进行翻转,把翻转后的子链表链接到头结点后面,然后把接下来的K个结点看成另外一个单独的链表进行翻转,把翻转后的子链表链接到上一个已经完成翻转子链表的后面 图示: 代码实现 coding:utf 8 """ @
阅读全文
摘要:交换链表中的相邻节点 题目描述: 把链表相邻元素翻转,例如给定链表为1——>2一>3一 4一>5—— 6一>7,则翻转后的链表变为2一>1一>4一>3一>6一>5一>7 解题思路: 就地逆序法: 通过调整结点指针域的指向来直接调换相邻的两个结点。如果单链表恰好有偶数个结点,那么只需要将奇偶结点对调即
阅读全文
摘要:检测单链表中是否有环 方法一:蛮力法 定义一个集合用来存放结点的引用,并将其初始化为空,从链表的头结点开始向后遍历,每遍历到一个结点就判断集合中是否有这个结点的引用,如果没有,说明这个结点是第一次访问,还没有形成环,那么将这个结点的引用添加到集合中去。如果在集合中找到了同样的结点,那么说明这个结点已
阅读全文
摘要:寻找倒数第k个元素 方法一: 将单链表逆置,变换成寻找正数第k个元素 方法二: 快慢指针法,快指针比慢指针快k个节点,当快指针到达尾节点时,慢指针为倒数第k个节点 方法三: 顺序遍历两次链表法,第一次遍历求出链表长度n,将寻找倒数第k个元素转换成寻找正数第n k个元素 代码实现方法二: coding
阅读全文
摘要:链表重排序 题目描述: 给定链表 Lo一>L1一>L2… Ln 1一>Ln,把链表重新排序为 Lo Ln一>L1一>Ln 1 L2一> Ln 2…。要求:(l)在原来链表的基础上进行排序,即不能申请新的结点;(2)只能修改结点的 next 域,不能修改数据域。 解题思路: 1. 找出链表的中间节点,
阅读全文
摘要:问题描述 给定两个单链表,链表的每个结点代表一位数,计算两个数的和。例如 :输入链表 (3一>1一> 5)和链表(5一>9一> 2),输出 :8 0 8,即 513+295 =808,注意个位数在链表头。 class Node: def __init__(self, data=None, next=
阅读全文
摘要:无序链表移除重复项 coding:utf 8 class Node: def __init__(self, data=None, next=None): self.data = data self.next = next def print_link(head): cur = head.next w
阅读全文
摘要:链表逆序 有头结点的链表逆序 coding:utf 8 有头结点的链表逆序 class Node: def __init__(self, data=None, next=None): self.data = data self.next = next def print_link(head): cu
阅读全文

浙公网安备 33010602011771号