【Linked-list专题-1】445. Add Two Numbers II 328. Odd Even Linked List
来源:互联网 发布:python 最小化到托盘 编辑:程序博客网 时间:2024/06/03 07:14
445. Add Two Numbers II
之前在做第二题Add Two Numerbers就在想,如果给的链表不是反向排列,又该如何做呢,一时间实在没想出来。
今天打算按照各项专题来刷题,先从弱项链表开始吧,结果一上来就看到了这题,正向排列链表相加,最后瞄了一下评论才想起,这不就是栈的使用场景吗!
考虑到栈后就很容易实现了,这边C++的stack,pop和top是分开的两个函数,合并一起写后,代码更整洁了,并且击败了92%的结果!
看来很多人还是惯性思维的将输入链表反向排列再求和。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: int mypop(stack<int>& sk){ if(!sk.empty()){ int val = sk.top(); sk.pop(); return val; } return 0; } ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int carry = 0, sum = 0; ListNode* tail(0); stack<int> sk1,sk2; while(l1){ sk1.push(l1->val); l1 = l1 -> next; } while(l2){ sk2.push(l2->val); l2 = l2 -> next; } while(!sk1.empty() || !sk2.empty() || carry){ sum = mypop(sk1) + mypop(sk2) + carry; carry = sum / 10; ListNode* node = new ListNode(sum % 10); node->next = tail; tail = node; } return tail; }};
328. Odd Even Linked List
这题跟以前遇到的面试题是差不多的,可惜当时手打功夫还不够好,有思路但是就是实现的时候一直出错。
我的做法是生成一个奇数链表和偶尔链表,这题里面遇到两个问题
1. 链表尾没有置next为NULL,导致输入结点数为奇数时,会导致循环链表,造成死循环!!!
2. 仍然是关于复杂度计算问题,题目明显要求O(1)空间复杂度,O(n)时间复杂度,时间是满足了,空间的问题,之前因为感觉自己是另开了两个链表,所以有空间开销,但是解决了1的问题后,提交又通过了,回想一下,其实我只是定义了两个头结点,其他的都是指针之间的操作,应该是O(1)的
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* oddEvenList(ListNode* head) { ListNode oddHead(0),evenHead(0); ListNode* oddptr = &oddHead; ListNode* evenptr = &evenHead; int index = 1; while(head){ if(index % 2 == 1){ oddptr->next = head; oddptr = oddptr->next; } if(index % 2 == 0){ evenptr->next = head; evenptr = evenptr->next; } head = head->next; index++; } evenptr->next = NULL; //当结点数为奇数时,偶数链表的最后一个结点指向了原链表中的倒数第二个结点(如[1,2,3],此时evenptr->next = 3的结点,会导致环形链表死循环,因为新链表中,3是奇数链表的结尾,又链接到偶尔链表的开头2,2->3->2) oddptr->next = evenHead.next; return oddHead.next; }};
阅读全文
0 0
- 【Linked-list专题-1】445. Add Two Numbers II 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 328. Odd Even Linked List
- 存储级别和存储调用
- Binary Search:436. Find Right Interval
- 深入研究java.lang.ThreadLocal类
- [Python 实战]
- 基于swing界面的简单的班级管理系统
- 【Linked-list专题-1】445. Add Two Numbers II 328. Odd Even Linked List
- 控制反转(IOC)和依赖注入(DI)的理解
- Pyhton 单行、多行注释方法
- [Leetcode1_Two Sum]
- HDU 1864(动态规划-01背包)
- maven环境搭建过程中问题及解决方案
- 利用隐式标记重要度的多标记学习
- 欢迎使用CSDN-markdown编辑器
- Matlab---图像滤波之各种滤波器汇总实现