
链表
菲菲飞xiu
这个作者很懒,什么都没留下…
展开
-
LintCode-翻转一个链表
样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题思路:先设置一个空结点prev,用它作为中间变量。而设置的temp是一个可移动的指针,用它来完成循环后的挪到下一结点。循环第一次,把开始结点变成了尾结点,循环第二次,把temp指向了下一个结点,把下一结点的指针指向了上一结点,完成新的链接,以此类推,直到指向了空,循环结束。完成了链表翻转。关键代码原创 2017-03-27 23:01:29 · 353 阅读 · 0 评论 -
LintCode-链表倒数第n个节点
题目描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.做题思路:利用两个头结点移动,P先走n-1个结点,之后p走一个,q就走一个,知道p指向空时,q就指向了倒数第n个结点。关键代码:ListNode *nthToLast(ListNode *head, int n){原创 2017-03-28 00:37:16 · 204 阅读 · 0 评论 -
LintCode-删除排序链表中的重复元素
题目描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。解题思路:用p作为移动的指针,来判断该指针指向的数据和下一结点的数据是否一样,不一样则指向下一结点,一样的话就用覆盖的方法,删除该结点,直至指向空结点或下一结点为空。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null关键代原创 2017-03-28 00:38:41 · 242 阅读 · 0 评论 -
LintCode-删除链表中倒数第n个节点
题目描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.做题思路:找到第n个结点之后,删除该结点,此题运用了之前找到倒数第n个结点的部分代码。关键代码:ListNode *removeNthFromEnd(ListNode *he原创 2017-03-28 00:43:13 · 229 阅读 · 0 评论 -
LintCode-两两交换链表中的节点
题目描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出 1->2->3->4, 你应该返回的链表是 2->1->4->3做题思路:找一个中间变量d,把一个结点的值存储起来,再进行结点之间值的交换。关键代码:ListNode* swapPairs(ListNode *head) { // Write your code here in原创 2017-03-28 00:44:44 · 240 阅读 · 1 评论 -
LintCode-合并两个排序链表
题目描述:将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null,返回 1->2->3->8->11->15->null。做题思路:用两个头结点l1和l2遍历两个链表,比较结点值的大小,小的那个进入新的链表,新链表定义一个头结点,指向的结点放入值以后,挪动到下一个结点,要额外考虑刚开始链表就为空,和遍历中有一个链表提前到达空的情况。原创 2017-03-29 12:16:07 · 1196 阅读 · 1 评论 -
LintCode-删除链表中的元素
题目描述:删除链表中等于给定值val的所有节点。样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。做题思路:用指针指向结点,从开始结点一个一个找,如果该结点的值等于输入的值,那么对该结点进行覆盖。关键代码: ListNode *removeElements(ListNode *head, int val)原创 2017-03-29 12:17:43 · 232 阅读 · 0 评论 -
LintCode-链表求和
题目描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null做题思路:用while循环进行相加、取模、进位,为进位的数开辟一个新的结点。然后把相加的数放进新创建的结原创 2017-03-29 23:13:46 · 454 阅读 · 0 评论 -
LintCode-链表插入排序
用插入排序对链表排序样例Given 1->3->2->0->null, return 0->1->2->3->null解题思路:用temp移动,指向head指向的下一个结点。用while循环判断指针指向的下一个地址不为空,如果新建的链表指向的结点的值小于原链表指向的结点的值,就向下移动,head指向的结点断链,把该结点放在node的那个链表后面,head再指向下一个结点,temp指向h原创 2017-03-29 23:53:10 · 1521 阅读 · 0 评论 -
LintCode-链表划分
题目描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null做题思路:先找到比给定的val大和小的结点,找到之后,比给定值小的划分到leftdummy的后面,比给定值大的结点划分到righ原创 2017-03-29 23:59:52 · 1185 阅读 · 0 评论 -
LintCode-链表专题总结
专业总结:刚开始让我们做题的时候我的内心是拒绝的,因为觉得上课讲的东西并没有完全的懂就开始做题,肯定不会。但是老师在ppt里面放了几个链表的题,对着这几个题一个一个画图的看,最后弄懂了,剩下的几个题中有比较简单的,错几遍改一改就可以accepted了,后面觉得有点难度的题是最后剩的两个题,一个是合并链表,还有一个是链表求和。让我改的次数最多的就是合并链表,我觉得自己写的没问题,却一直越界,一直没找原创 2017-03-30 00:04:38 · 353 阅读 · 0 评论 -
LintCode-在O(1)时间复杂度删除链表节点
题目描述:.给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为1->2->4。解题思路:先赋值后改变地址,先把该节点的下一个结点的数据赋值给该结点,然后再把指针指向下下个结点的地址,完成这两步之后,该结点就被下一结点覆盖了,完成了删除该结点的任务。关键代码:原创 2017-03-27 22:57:19 · 227 阅读 · 0 评论