![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
文章平均质量分 66
zy11110
这个作者很懒,什么都没留下…
展开
-
合并两个排序链表
题目: 合并两个排序链表,将两个排序链表合并为一个新的排序链表。 样例: 给出 1->3->8->11->15->null,2->null, 返回1->2->3->8->11->15->null。 思路: 具体代码: /** * Definition of ListNode * class ListNode { * public:原创 2017-03-27 19:33:38 · 209 阅读 · 0 评论 -
删除链表中的元素
题目: 删除链表中等于给定值val的所有节点。 样例 给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。 思路: 通过遍历链表找出与给定值相同的结点,如果head->next的值等于val,则将head->next指向head->next->next,继续往下遍历,重复前面步骤。 /**原创 2017-03-30 16:54:08 · 186 阅读 · 0 评论 -
删除排序链表中的重复元素
题目: 删除排序链表中的重复元素。给定一个排序链表,删除所有重复的元素每个元素只留下一个。 样例: 给出 1->1->2->null,返回 1->2->null 给出 1->1->2->3->3->null,返回 1->2->3->null 思路: 该题所给的链表是有序的链表,这大大降低了该题的难度,所以只要再定义一个指针p,固定head,移动p,看p的值是否与head的值原创 2017-03-26 20:38:01 · 156 阅读 · 0 评论 -
在O(1)时间复杂度删除链表节点
题目 给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 样例 给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。 思路: 题目中要求用O(1)时间复杂度删除结点,如果用像“删除链表中倒数第” /** * Definition of ListNode * class ListNod原创 2017-03-25 16:53:57 · 211 阅读 · 0 评论 -
翻转链表
题目: 翻转一个链表 样例: 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 思路: 定义一个指针p,作为head->next的指向,由于令head->next=p后,head->next就发生了改变,所以要提前定义一个指针node,并令head->next=node。通过移动head(令head=node)并改变head->next的指向来翻转原创 2017-03-25 16:12:38 · 280 阅读 · 0 评论 -
删除链表中倒数第n个结点
题目: 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 注意事项: 链表中的节点个数大于等于n 样例: 给出链表1->2->3->4->5->null和 n = 2.,删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.O(n)时间复杂度 思路: 代码: /** * Definition of ListNode * class原创 2017-03-24 08:52:51 · 242 阅读 · 0 评论 -
链表倒数第n个节点
题目: 找到单链表倒数第n个节点,保证链表中节点的最少数量为n。 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. 思路: 先统计出链表总的元素个数a,而倒数第n个元素就是正数第a-n+1个元素。链表有方向,所以正向寻找元素比较方便。知道了该元素为正数第几个元素后,便可以从链表的头指针开始,逐步找到该元素,然后返回该元素。具体步骤为: ①定义一个原创 2017-03-23 21:37:04 · 411 阅读 · 0 评论 -
两两交换链表中的节点
题目: 给一个链表,两两交换其中的节点,然后返回交换后的链表。 样例: 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。 挑战: 你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路: 将链表中的结点分组,四个一组,在每一组中,第一个结点的next指向第四个结点,第二个结点的next指向第一个结点,此组操作完成原创 2017-03-30 16:37:20 · 247 阅读 · 0 评论 -
链表求和
题目: 你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 样例: 给出两个链表 3->1->5->null 和 5->9->2->null,返回8->0->8->null 思路: 主要是通过移动两个链表的指针,将两个链表中位于相同位数上的数字加起来,再把和赋值到新的原创 2017-03-29 21:08:29 · 236 阅读 · 0 评论 -
链表划分
题目: 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。 样例: 给定链表 1->4->3->2->5->2->null,并且 x=3 返回 1->2->2->4->3->5->null 思路: /** * Definition of ListNode * class L原创 2017-03-27 20:49:02 · 238 阅读 · 0 评论 -
链表插入排序
用插入排序对链表排序 Given 1->3->2->0->null, return 0->1->2->3->null /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) {原创 2017-03-25 16:15:30 · 223 阅读 · 0 评论