链表
文章平均质量分 57
myxabc
这个作者很懒,什么都没留下…
展开
-
链表总结
链表总结 链表这一部分题,主要是对链表进行单链表遍历,插入,删除,排序,按值查找,按位查找,头插法建立单链表,尾插法建立单链表等操作。 单链表遍历: 单链表插入:插入第i个节点中,先找到第i-1个节点p。如果没有找到throw"位置",否则,申请一个新的节点,其数据域为x,将节点s插入到节点p之后。 单链表删除:删除第原创 2017-03-30 16:44:20 · 194 阅读 · 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 · 174 阅读 · 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 · 112 阅读 · 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 · 247 阅读 · 0 评论 -
删除排序链表中的重复元素
问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例:给出1->1->2->NULL;返回1->2->NULL。实现思路:先考虑链表为空时的特殊情况;再考虑一般情况:定义两个指针变量p和q,初始时,P指向链表中的第一个元素,q指向链表中的第二个元素。如果p和q的值相等时,就删除q指针指向的节点。如果p和q的值不相等,则分别向后移一个节点。代码:ListNo原创 2017-03-26 15:55:37 · 142 阅读 · 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 · 225 阅读 · 0 评论 -
链表插入排序
问题描述:用插入排序堆链表排序。样例:Give 1->3->2->0->NULL,return 0->1->2->3->NULL。实现思路:先创建一个头节点,初始时,把原链表的第一个节点插入新链表作为第一个节点。然后依次读原链表的每个节点,把原链表中的节点插在第一个大于该节点 的值的节点之前。实现代码:/** * Definition of ListNode *原创 2017-03-29 19:22:43 · 297 阅读 · 0 评论 -
合并两个排序链表
问题描述:将两个排序链表合并为一个新的排序链表。实现思路:先考虑链表为空的情况,当两个链表不同时为空时。初始时,先比较两个链表第一个节点的值的大小。把节点小的插入新链表中,在节点值小的链表中向后移动一个节点。当其中有一个链表为空时,直接把另一个链表接在新链表中。代码:/** * Definition of ListNode * class ListNode { *原创 2017-03-29 19:54:00 · 133 阅读 · 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 · 201 阅读 · 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 · 151 阅读 · 0 评论 -
链表求和
问题描述:你有两个用链表代表的整数,其中每一个节点包含一个数字,数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。实现思路:当两个链表均不为空时,对应的元素相加,保留进位。当其中有一个链表为空时,将近位加进另一个链表。如果加到最后一位还有进位,就创建一个新的节点,该节点的值等于该进位,该节点的next等于NULL。代码:原创 2017-03-30 16:25:13 · 390 阅读 · 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 · 667 阅读 · 0 评论