链表
zy_41015
这个作者很懒,什么都没留下…
展开
-
删除链表中的元素
描述:删除链表中等于给定值val的所有节点。样例:给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。解题思路:先定义一个dummy节点,将head指针指向的数值储存起来,然后遍历链表,找到特定值的节点将它删除。代码:/** * Definition for singly-linked list.原创 2017-03-30 12:32:08 · 180 阅读 · 0 评论 -
链表倒数第n个节点
描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例:给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.实现思路:先将整个链表遍历一遍,确定链表中的元素个数。若链表中的元素个数小于n,则找不到倒数第n个元素。若链表当中的元素个数大于n时,找到它在链表当中的位置,并输出它的值。代码:/** * Definition of ListNo原创 2017-03-26 20:02:31 · 124 阅读 · 0 评论 -
翻转链表
描述:翻转一个链表样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null挑战 实现思路:遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。代码:/** * Definition of ListNode * * class ListNode原创 2017-03-26 20:20:54 · 156 阅读 · 0 评论 -
链表求和
描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null实现思路:首先如果两个链表当中有一个是空链表,就把另一个链表原样输出。另外,还要判断两个链表当中的元素个数的多原创 2017-03-27 21:56:20 · 184 阅读 · 0 评论 -
合并两个排序链表
描述:将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。解题思路:将两个链表当中的对应元素的值进行比较,重新确定新链表当中元素的位置。若第一个链表当前位置的值小于第二个链表当前值,则不需要改变位置,第一个链表的指针下移,反之,第二个链表指针下移。代码:原创 2017-03-27 22:12:44 · 222 阅读 · 0 评论 -
删除排序链表中的重复元素
描述:给定一个排序链表,删除所有重复的元素每个元素只解题思路:首先判断链表是不是非空。如果不是空的话,找到值相等的两个元素,并且将第二个元素删,且前一个元素的后继指向被删除元素以前的后继。代码:/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode原创 2017-03-27 22:27:03 · 162 阅读 · 0 评论 -
链表插入排序
描述:用插入排序对链表排序样例:Given 1->3->2->0->null, return 0->1->2->3->null解题思路:另外创造一个新的链表,为一个有序链表。将被排序的元素与顺序表当中的元素进行逐一比较,找到最后一个比被排序元素小的那一个元素,然后将此元素插入到那个元素的后面。代码:/** * Definition of ListNode * class Li原创 2017-03-27 22:37:22 · 129 阅读 · 0 评论 -
链表划分
描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例:样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null 解题思路:我们分别定义两个指针,一个左指针,一个右指针。如果链表当前元素小于给定元素的值,则将该元素原创 2017-03-28 21:46:11 · 161 阅读 · 0 评论 -
两两交换链表中的节点
描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。解题思路:首先我们先定义一个dummy指针,将它指向head。下面,我们开始遍历head指针,当head当前指向的元素和它指向的下一个元素都不为空的时候可以交换两个节点。以交换第一个节点与第二个节点为例,先将head节点指向第二个节点,此时第一个节点与h原创 2017-03-28 22:03:03 · 173 阅读 · 0 评论 -
链表答题情况总结
通过练习链表这一部分的题目,我感觉到了链表的本质操作都离不开它的指针。而当时在学习C++这一部分的时候,指针正好是我的短板。但是通过做这一部分的题,我感觉到指针用起来真的很灵活。这些题目当中,有的是利用指针确定倒数第n个节点,有的通过指针指向元素的值进行判断进而排序,有的可以通过定义两个指针来对链表进行划分。总之,我感觉,指针就是链表当中一个无所不能的工具,有了指针其他操作都会变得简单好多,同时它原创 2017-03-28 22:14:28 · 214 阅读 · 0 评论 -
在O(1)时间复杂度删除链表节点
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。思路:从链表的第一个元素开始查找,找到特定值元素的节点,将它删除。代码:/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next;原创 2017-03-26 19:43:14 · 181 阅读 · 0 评论