链表
文章平均质量分 78
HiPricilla
这个作者很懒,什么都没留下…
展开
-
【链表】C++两个链表的公共结点
题目:(剑指offer编程题)输入两个单向链表,找出它们的第一个公共结点。公共结点是地址相同的两个结点,也就是同一个结点,由于是单向链表,所有从公共结点之后两链表重合。思路:方法1:最容易想到的办法是用两个循环,遍历第一个链表,对每一个元素遍历第二个链表,找相同的结点。这种算法时间复杂度为O(mn)(假设链表长度分别为m和n),不适用这种方法。方法2:如果两个链表有公共结点,那原创 2016-07-17 19:20:10 · 2345 阅读 · 0 评论 -
【链表】C++删除链表中重复的结点
题目: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5注意要删除的是所有重复的,而不是删除多余的。开始理解成1-2-3-4-5,事实证明全部删除比删除多余复杂挺多。我尝试了三种方法,牛客网上运行通过,思路如下:(1)遍历链表,重复的数字置0,如1-2原创 2016-07-16 18:36:59 · 5620 阅读 · 2 评论 -
【链表】C++链表创建、删除、排序,合并
实现C++链表的创建、删除、排序、合并(保持单调不减)思路:方法1:如果将两链表头尾相接后再整体排序,复杂度太高。因此可以利用链表已经排好序的特点进行逐步合并。用两个指针p1、p2指向两链表头结点head1、head2,并比较,显然,值小的为合并链表的头结点head,假如p1值较小,p1=head, p1后移,再与p2比较,值小的并入合并链表,并且指针加1,依次类推,直到某一个链表为空后,原创 2016-07-19 10:32:08 · 8815 阅读 · 0 评论 -
【链表】C++快慢两个指针解决问题(分别求倒数第k个、中间以及环的入口结点)
题目:输入一个单向链表,输出该链表中倒数第k个结点输入:循环输入(Ctrl+C结束输入):链表元素个数、各元素值、k,(如5 1 2 3 4 5 3)输出:输出每组倒数第k个结点的值思路:常规思路可以遍历链表记录长度,再次遍历找到第len-k+1个结点即是倒数第k个。更好也是很经典的一个办法,设置两个指针指向头结点,前指针先走k-1步,此时后指针开始与前指针同步走,保持指针之间距离为k原创 2016-07-17 18:46:21 · 527 阅读 · 0 评论 -
【链表】C++链表反转、链表逆序打印
题目:C++实现链表逆序打印、链表反转如何将链表逆序,取决于题目的要求。如果面试官只要求打印,一般不改动链表结构为好,如果要求改变链表的方向,则需要改变结构,再顺序打印。方法1:只逆序打印,不改变结构。采用递归,到达尾结点时打印输出,否则进入下一个结点的递归,当递归一层层退出的时候,便可以实现从尾到头的打印。方法2:头插法,改变结构。从第二个结点开始往后,依次把每个结点移至链表头部,要原创 2016-07-18 15:46:14 · 9481 阅读 · 3 评论