代码改变世界

随笔分类 -  链表系列文章

面试题14:用O(1)时间删除链表结点

2016-03-31 22:17 by Keiven_LY, 1347 阅读, 收藏, 编辑
摘要: 题目描述: 给定一个单向链表的头指针和一个结点指针,实现一个函数在o(1)时间删除该结点。 基本思路: 通常我们删除某个节点都是从头开始遍历到需要删除节点的前一个节点。然后使得该节点的next指向删除节点的next即可,这样看来删除一个节点的复杂度为O(n)。然而我们其实遍历的目的只是想获取想要删除 阅读全文

面试题13:删除单链表中的重复元素

2016-03-31 22:14 by Keiven_LY, 805 阅读, 收藏, 编辑
摘要: 算法思路: 设立三个工作指针p,q,r,p用于遍历链表,q用于遍历p后面的链表,r保存需要删掉的结点。P遍历整个链表,p每到一个结点,q就从这个结点往后遍历,并与p比较,相同的话就删掉此结点。 功能函数: 阅读全文

面试题12:单链表建环

2016-03-31 22:13 by Keiven_LY, 248 阅读, 收藏, 编辑
摘要: 昨天研究了关于单链表是否有环的问题,但是我们建的的单链表本身就是没环的。我们能否给一个无环链表建环呢? 当然可以,不过得想想算法。其实貌似也不难,只要找到最后一个结点 tail,让它指向环的入口就行。所以问题分解为:找到环入口点 cur,把最后的指针 tail 指向 cur即可。、 算法思想: 1、 阅读全文

面试题11:如何判断单链表是否存在环

2016-03-29 22:08 by Keiven_LY, 3689 阅读, 收藏, 编辑
摘要: 单链表有环的定义:链表的尾节点指向了链接中间的某个节点。 如下图所示,如果有环,则遍历到结点7时,又重新回到结点3,结点3就是环的入口结点。 思路:采用快慢指针的思想,设两个工作指针,一个快一个慢,如果链表有环,它们必然会在某个结点处相遇。 功能函数: 这里需要注意一个问题,为什么快慢指针相遇就说明 阅读全文

面试题10:查找单链表的中间结点

2016-03-29 22:04 by Keiven_LY, 1271 阅读, 收藏, 编辑
摘要: 思路1:首先求出单链表的总长度n,然后从链表的头节点开始遍历,当遍历到n/2个节点时,即为链表的中间结点。(面试题9:单链表中倒数第k个结点 的思路1) 思路2:设置两个工作指针*p1、*p2都指向单链表的头节点。其中*p1的移动速度是*p2的2倍。当p1指向尾节点的时候,p2正好指向链表的中间结点 阅读全文

面试题9:单链表中倒数第k个结点

2016-03-29 21:53 by Keiven_LY, 645 阅读, 收藏, 编辑
摘要: 题目描述: 输入一个单链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点为倒数第1个结点。如一个链表有6个结点,从头到尾依次为:1、2、3、4、5、6,则这个链表的倒数第2个结点是值为5的结点。 思路1:首先求出单链表的总长度n,然后从链表的头节点开始遍历,当 阅读全文

面试题8:从尾到头打印单链表

2016-03-28 22:30 by Keiven_LY, 1305 阅读, 收藏, 编辑
摘要: 题目描述: 实现一个函数,输入一个单链表的头结点,从尾到头反过来打印出每个结点的值 思路1:第一反应是将链表中的指针反转,改变链表的方向,然后再从头打印出来(该方法改变了原来链表的结构,这就要看面试或笔试时的要求,可否改变链表结构) 思路2:遍历链表时是从头到尾,而打印链表时却是从尾到头,典型的“先 阅读全文

面试题7:单链表的反转/逆序

2016-03-28 22:26 by Keiven_LY, 429 阅读, 收藏, 编辑
摘要: 题目描述: 实现一个函数,输入一个单链表的头结点,反转该链表并输出反转后链表的头结点。 基本思路: 比如链表:1->2->3->4->5->6 1.定义三个指针pcur,pnext,prev; 2. pcur指向1, pnext指向2, prev指向3; 3. 首先pcur->next=NULL(第 阅读全文

面试题6:查找某数在链表中的位置

2016-03-27 22:57 by Keiven_LY, 1482 阅读, 收藏, 编辑
摘要: 基本思路:声明一个结点p指向链表头结点,然后用p遍历链表,当p->data与要查询的数据相等时,返回其位置即可。 功能函数: 完整可执行程序: 运行结果: 阅读全文

面试题5:获取单链表指定位置的元素

2016-03-27 22:55 by Keiven_LY, 1737 阅读, 收藏, 编辑
摘要: 在线性表的顺序存储结构中,我们要计算任意一个元素的存储位置是很容易的。因为线性表的顺序存储就是个数组嘛,比如要获取第5个元素,可以直接a[5]就行了。但在单链表中,由于第i个元素到底在哪是没办法一开始就知道,必须得从头开始找。 基本思路: 功能函数: 阅读全文

面试题4:单链表的插入与删除

2016-03-27 22:52 by Keiven_LY, 759 阅读, 收藏, 编辑
摘要: 单链表第pos位置插入结点的算法思路: 单链表的插入功能函数 单链表删除pos位置的结点的算法思路: 单链表的删除功能函数 完整的可执行程序: 运行结果: 阅读全文

链表系列算法精选

2016-03-25 21:40 by Keiven_LY, 663 阅读, 收藏, 编辑
摘要: 本系列文章均来源于网络,主要用于自己的学习,巩固,如有侵权请告知!!! 主要来源: 《剑指offer》 《编程之法-面试和算法心得》 《程序员面试宝典》 快课网: http://www.cricode.com/3282.html 微软博客大牛:http://blog.csdn.net/morewin 阅读全文

面试题3:单链表重置为空表

2016-03-25 21:32 by Keiven_LY, 1502 阅读, 收藏, 编辑
摘要: 题目描述: 当我们不需要使用单链表时,就需要将其销毁,也就是在内存中将其释放掉。 单链表销毁的基本思路: 1、声明两个结点:p和q; 2、将链表的第一个结点赋给结点p; 3、循环: 将下一结点赋值给q; 释放p; 将q赋值给p。 单链表销毁的功能函数: 完整的可执行程序: 运行结果: 阅读全文

面试题2:单链表的创建、打印

2016-03-25 21:29 by Keiven_LY, 404 阅读, 收藏, 编辑
摘要: 题目描述: 编程实现一个单链表的建立、打印 单链表的创建功能函数 单链表的打印功能函数 完整的可执行程序: 运行结果: 阅读全文

面试题1:单链表的初始化、测长

2016-03-25 21:23 by Keiven_LY, 855 阅读, 收藏, 编辑
摘要: 单链表结点的结构体表示 单链表初始化的功能函数 单链表测长的功能函数 完整的可执行程序如下: 运行结果: 阅读全文

单链表的基本概念

2016-03-25 21:14 by Keiven_LY, 812 阅读, 收藏, 编辑
摘要: 单链表的结构 为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。 数据域:我们把存储数据元素信息的域称为数据域。 指针域:存储直接后继位置的域称为指针域。 指针/链:指针域中存储 阅读全文

面试题:单链表的几种处理

2013-10-06 15:45 by Keiven_LY, 386 阅读, 收藏, 编辑
摘要: 首先链表节点的定义如下: 面试题1:创建一个单链表 功能函数: 面试题2:编程实现单链表的打印 功能函数: 面试题3:编程实现从尾到头打印单链表(剑指offer) 思路1:第一反应是将链表中的指针反转,改变链表的方向,然后再从头打印出来(该方法改变了原来链表的结构,这就要看面试或笔试时的要求,可否改 阅读全文