![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
文章平均质量分 57
myxabc
这个作者很懒,什么都没留下…
展开
-
链表总结
链表总结 链表这一部分题,主要是对链表进行单链表遍历,插入,删除,排序,按值查找,按位查找,头插法建立单链表,尾插法建立单链表等操作。 单链表遍历: 单链表插入:插入第i个节点中,先找到第i-1个节点p。如果没有找到throw"位置",否则,申请一个新的节点,其数据域为x,将节点s插入到节点p之后。 单链表删除:删除第原创 2017-03-30 16:44:20 · 200 阅读 · 0 评论 -
删除链表中倒数第N个节点
1.问题描述:给定一个链表删除链表中倒数第N个节点,返回链表的头结点。 2.实现思路:首先 ListNode *removeNthFromEnd(ListNode *head, int n) { // write your code here if (head == NULL) { return NULL; }原创 2017-03-26 15:16:28 · 183 阅读 · 0 评论 -
翻转链表
问题描述: 翻转一个链表 样例:给出一个链表1->2->3->NULL,这个翻转后的链表为3->2->1->NULL。 实现思路: 代码: ListNode *reverse(ListNode *head) { ListNode *p = NULL; while (head != NULL) { ListNode *原创 2017-03-26 16:20:43 · 117 阅读 · 0 评论 -
删除链表中的元素
问题描述: 删除链表中等于给定值val的所有节点 样例:给出链表1->2->3->3->4->5->3,和val=3,你需要返回的是删除3之后的链表:1->2->4->5。 实现思路: 如果链表为空直接返回NULL; ListNode *removeElements(ListNode *head, int val) { if ( head == NULL )原创 2017-03-26 15:38:17 · 256 阅读 · 0 评论 -
删除排序链表中的重复元素
问题描述: 给定一个排序链表,删除所有重复的元素每个元素只留下一个。 样例:给出1->1->2->NULL;返回1->2->NULL。 实现思路: 先考虑链表为空时的特殊情况;再考虑一般情况:定义两个指针变量p和q,初始时,P指向链表中的第一个元素,q指向链表中的第二个元素。如果p和q的值相等时,就删除q指针指向的节点。如果p和q的值不相等,则分别向后移一个节点。 代码: ListNo原创 2017-03-26 15:55:37 · 149 阅读 · 0 评论 -
在O(1)时间复杂度删除链表节点
问题描述: 给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在O(1)时间复杂度删除该链表节点。 样例:给定1->2->3->4,和节点3,删除3之后,链表应该变为1->2->4。 实现思路: 先考虑特殊情况 if (node->next== NULL)。再考虑一般情况:先把该节点的下一个节点的值赋给该节点,再删除该节点的下一个节点。 代码: void deleteNode(原创 2017-03-29 19:00:22 · 233 阅读 · 0 评论 -
链表插入排序
问题描述: 用插入排序堆链表排序。 样例:Give 1->3->2->0->NULL,return 0->1->2->3->NULL。 实现思路: 先创建一个头节点,初始时,把原链表的第一个节点插入新链表作为第一个节点。然后依次读原链表的每个节点,把原链表中的节点插在第一个大于该节点 的值的节点之前。 实现代码: /** * Definition of ListNode *原创 2017-03-29 19:22:43 · 302 阅读 · 0 评论 -
合并两个排序链表
问题描述: 将两个排序链表合并为一个新的排序链表。 实现思路: 先考虑链表为空的情况,当两个链表不同时为空时。初始时,先比较两个链表第一个节点的值的大小。把节点小的插入新链表中,在节点值小的链表中向后移动一个节点。当其中有一个链表为空时,直接把另一个链表接在新链表中。 代码: /** * Definition of ListNode * class ListNode { *原创 2017-03-29 19:54:00 · 140 阅读 · 0 评论 -
链表划分
问题描述: 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。应该保留两部分内链表节点原有的相对顺序。 样例:给定链表 1->4->3->2->5->2->NULL,并且x=3 返回 1->2->2->4->3->5->NULL。 实现思路: 先创建两个头节点leftDummy和rightDummy,定义两个指针变量left和right。原创 2017-03-26 18:24:28 · 209 阅读 · 0 评论 -
两两交换链表中的节点
问题描述: 给一个链表,两两交换其中的节点,然后返回交换后的链表。 实现思路: 代码: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NUL原创 2017-03-30 16:07:49 · 158 阅读 · 0 评论 -
链表求和
问题描述: 你有两个用链表代表的整数,其中每一个节点包含一个数字,数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。 实现思路: 当两个链表均不为空时,对应的元素相加,保留进位。当其中有一个链表为空时,将近位加进另一个链表。如果加到最后一位还有进位,就创建一个新的节点,该节点的值等于该进位,该节点的next等于NULL。 代码:原创 2017-03-30 16:25:13 · 394 阅读 · 0 评论 -
返回链表中的倒数第N个节点
1.基本问题描述:找到并返回链表中倒数第N个节点,保证链表中节点的最少数量为N。 2.实现思路:首先利用IF函数得到链表的总节点数M个;链表中的倒数第N个节点就是该链表的第M-N+1个节点;找到该连表中的第M-N+1个节点,并返回该节点。 3.代码: ListNode *nthToLast(ListNode* head, int n) { // write your co原创 2017-03-25 20:49:17 · 681 阅读 · 0 评论