链表问题
MC丶吼吼
跪求offer养家糊口。。
展开
-
链表问题_复杂链表的复制
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空...原创 2018-06-29 14:54:49 · 207 阅读 · 0 评论 -
链表问题_两个链表的第一个公共节点
题目:输入两个链表,找出它们的第一个公共结点 分析:对于这个问题有三种思路: 1、蛮力算法,当遍历到一个节点时,就在另外一个链表上顺序遍历,并且判断是否相等,如果想等就是第一个重合的节点,对于两个长度分别为m和n的链表,所需要的时间为O(m*n)。实现如下: struct ListNode { int val; struct ListNode *next;...原创 2018-06-29 15:55:08 · 284 阅读 · 1 评论 -
链表问题_从尾到头打印链表
题目:输入一个链表的头节点,从尾到头打印链表。 分析:有两种思路,1、借助栈,从头到尾遍历链表将值存入栈中,然后输出栈中的值即可。2、可以使用递归,递归的本质就是一个栈结构,但是当链表很长的时候,会导致函数调用的层级很深,从而导致函数调用栈溢出,这里仅给出解法。/*解法1*//*** struct ListNode {* int val;* stru...原创 2018-06-27 15:02:22 · 132 阅读 · 0 评论 -
链表问题_在O(1)时间内删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该结点。 分析:对于删除单向链表中的节点,通常的思路:删除节点I之前,先从链表的头结点开始遍历到I前面的一个节点h,把h的next节点指向I的下一个节点j,再删除节点I,但是这样做的复杂度为O(n)。这里采用另外一种思路,把节点j的内容复制覆盖节点I,接下来再把节点I的next指向j的下一个节点,之后再删除节点j。...原创 2018-06-27 15:53:33 · 298 阅读 · 0 评论 -
链表问题_链表中倒数第K个节点
题目:输入一个链表,输出该链表中倒数第k个节点。尾节点为倒数第一个节点。 分析:可以采用两个指针,记为start和end,先让end在链表上走k-1步,然后两个节点同时开始走,当end到达尾节点时,start即为倒数第k个节点。这相当于做了一个长度为k的标尺一样,虽然很简单,但是在涉及到指针的操作时,一定要注意代码的鲁棒性,具体如下:/*struct ListNode { in...原创 2018-06-27 16:27:47 · 172 阅读 · 0 评论 -
链表问题_反转链表
题目:输入一个链表的头结点,翻转该链表之后输出头结点。 分析:翻转一个链表即翻转其连接方向,定义三个指针,pnode表示当前遍历到的节点;p_pre为pnode的前驱,p_succ为pnode的后继,之前的连接方向为p_pre->pnode->p_succ,将其改为p_pre<-pnode<-p_succ即可,在实现的过程中要注意代码的鲁棒性。实现如下: Lis...原创 2018-06-27 17:06:50 · 151 阅读 · 0 评论 -
链表问题_合并两个排序链表
题目:输入两个递增排序的链表,合并这两个排序链表,使得合并之后的链表仍然使递增排序的。 分析:即是归并排序中的归并操作,有两种具体的实现:1、使用递归的方法,2、迭代版本,逐个合并链表。实现如下:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : va...原创 2018-06-27 19:31:17 · 141 阅读 · 0 评论 -
链表问题_链表中环的入口节点
题目:一个链表中包含环路,求链表的入口节点。 分析:根据求链表中倒数第K个节点的方法,这个问题可以分为两个步骤:1、判断链表中的节点个数记为K,对于这个可以采用一快一慢两个指针,当两个指针相遇时,则相遇的节点就在环中,然后根据此节点就可以求出环的大小。2、由于已经知道环的个数,就可以使用类似于求链表倒数第K个节点的方法,使用两个指针,他们之间的间隔为K,两个同时在链表上移动,当他们相遇时的节点,...原创 2018-07-03 09:34:45 · 267 阅读 · 0 评论 -
链表问题_删除排序链表中的重复节点
题目:在一个排序链表中删除其中重复的节点,重复的一个不留。 分析:若我们定义的函数无返回值则应该讲函数的参数定义成**phead,因为头结点也可能被删除,具体的实现如下: struct ListNode { int val; struct ListNode *next; ListNode(int x) : val...原创 2018-07-03 11:25:23 · 404 阅读 · 0 评论