leetcode-List
文章平均质量分 70
varcom
这个作者很懒,什么都没留下…
展开
-
206. Reverse Linked List
方法1:非递归class Solution {public: ListNode* reverseList(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode* pre=head; head=head原创 2016-08-16 00:17:39 · 148 阅读 · 0 评论 -
86. Partition List
方法1:插入&删除class Solution {public: ListNode* partition(ListNode* head, int x) { ListNode* Head=new ListNode(-1); Head->next=head; ListNode* pre=Head,*cur=head,*p=原创 2016-08-19 18:22:53 · 196 阅读 · 0 评论 -
160. Intersection of Two Linked Lists
class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* pa=headA,*pb=headB; int la=0,lb=0; while(pa) { la++原创 2016-08-19 22:50:01 · 151 阅读 · 0 评论 -
141. Linked List Cycle
class Solution {public: bool hasCycle(ListNode *head) { if(head==NULL||head->next==NULL) return false; ListNode* fast=head->next,*slow=head; while(fast&&slow&&原创 2016-08-20 09:01:01 · 143 阅读 · 0 评论 -
142. Linked List Cycle II
从head到起始点为a,起始点到相遇点为b,圈常为x;fast走了a+b+n*x,slow走了a+b+m*x;a+b+n*x=2*(a+b+m*x)=》a+b=(n-2*m)*x=》在fast和slow相遇后再走a步即为起始点class Solution {public: ListNode* detectCycle(ListNode *head) { Li原创 2016-08-20 10:31:18 · 179 阅读 · 0 评论 -
382. Linked List Random Node
应用reservior sampling ,第i个被选中的概率为1/i,之后没有被选中的概率i-1/i,所以第1个被选中的概率为1/1*(1/2)*(2/3)*...(n-1)/n=1/n,class Solution {public: /** @param head The linked list's head. Note that the head is原创 2016-08-20 15:51:09 · 171 阅读 · 0 评论 -
109. Convert Sorted List to Binary Search Tree
方法1:分治法;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition for a binar原创 2016-08-21 09:14:14 · 162 阅读 · 0 评论 -
237. Delete Node in a Linked List
不能是尾结点class Solution {public: void deleteNode(ListNode* node) { if(node==NULL&&node->next) return; node->val=node->next->val; node->next=node->next->next;原创 2016-08-21 09:20:13 · 158 阅读 · 0 评论 -
147. Insertion Sort List
方法1:从后往前比较/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:原创 2016-08-21 09:32:46 · 163 阅读 · 0 评论 -
341. Flatten Nested List Iterator
方法1:NestedInteger实际上是一个树结构,递归实现。class NestedIterator {public: NestedIterator(vector &nestedList) { int len=nestedList.size(); int it=0; while(it<len) {原创 2016-08-21 10:00:03 · 182 阅读 · 0 评论 -
234. Palindrome Linked List
方法1:将前半段压入栈中,时间O(n),空间O(n);class Solution {public: bool isPalindrome(ListNode* head) { stack st; ListNode* cur=head; int len=0; while(cur) {原创 2016-08-19 15:52:36 · 150 阅读 · 0 评论 -
328. Odd Even Linked List
class Solution {public: ListNode* oddEvenList(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode* pre=head,*cur=head->next,*nx=NULL; List原创 2016-08-19 11:21:53 · 156 阅读 · 0 评论 -
23. Merge k Sorted Lists
方法1:堆排序,否则会超时class Solution {public: void MinHeadFixup(vector& vec,ListNode* p,int len) { vec.push_back(p); for(int i=len-1,j=(i-1)/2;(j>=0&&i!=0)&&vec[i]->valval;i=j,j=(i原创 2016-08-18 02:17:33 · 204 阅读 · 0 评论 -
92. Reverse Linked List II
方法1:加入一个指向头节点的节点,简化操作class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if(head==NULL||head->next==NULL) return head; ListNode原创 2016-08-16 01:36:08 · 149 阅读 · 0 评论 -
61. Rotate List
方法1:class Solution {public: ListNode* rotateRight(ListNode* head, int k) { if(head==NULL||head->next==NULL) return head; int len=1; ListNode* tail=h原创 2016-08-16 15:45:55 · 148 阅读 · 0 评论 -
148. Sort List
使用归并排序;/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: Li原创 2016-08-16 20:20:00 · 173 阅读 · 0 评论 -
83. Remove Duplicates from Sorted List
注意释放删除节点的空间;class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode* pre=head,*p=head->n原创 2016-08-16 21:56:14 · 213 阅读 · 0 评论 -
82. Remove Duplicates from Sorted List II
class Solution {public: ListNode* deleteDuplicates(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode* Head=new ListNode(-1); He原创 2016-08-16 23:49:11 · 235 阅读 · 0 评论 -
203. Remove Linked List Elements
class Solution {public: ListNode* removeElements(ListNode* head, int val) { ListNode* Head=new ListNode(-1); Head->next=head; ListNode* cur=head,*pre=Head; while(c原创 2016-08-17 00:12:07 · 159 阅读 · 0 评论 -
19. Remove Nth Node From End of List
class Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* Head=new ListNode(-1); Head->next=head; ListNode* pre=Head,*cur=Head;原创 2016-08-17 00:27:37 · 181 阅读 · 0 评论 -
143. Reorder List
先将后len/2的链表节点翻转,再依次插入前半段链表中class Solution {public: void reorderList(ListNode* head) { if(head==NULL||head->next==NULL) return; int len=0; ListNode*原创 2016-08-17 01:03:09 · 162 阅读 · 0 评论 -
21. Merge Two Sorted Lists
加虚拟头节点class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head=new ListNode(-1),*p=head; while(l1&&l2) { if(l1->valval)原创 2016-08-17 19:29:49 · 189 阅读 · 0 评论 -
138. Copy List with Random Pointer
方法1:先将节点放入vector中,先连接好每个节点的random。class Solution {public: int getNum(RandomListNode* head,RandomListNode* p) { if(p==NULL) return -1; int cnt=1; Random原创 2016-08-21 14:45:38 · 152 阅读 · 0 评论