LeetCode Partition List
2014-02-22 21:40
369 查看
关于链表的移动其实没什么,突然想到了能不能一段一段地移动呢,这样对于本身连在一起的就不用拆了在链接上了,应该是可以的,但一定是以一个为基准。下面的程序只是第一步移动了一段其他情况还是一个一个的移动,不能算高效。
下面的方法每次移动一段链表,不是一个个的移动,对于符合成段的用例时间应该会减少,但编译器的提交结果显示不是特别明显,反而时间还增加了。方法是对的。AC了。
// LeetCode_PartitionList.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *partition(ListNode *head, int x) { if(head==NULL||head->next==NULL) return head; ListNode *lesshead=NULL,*greaterhead=NULL,*p=NULL,*q=NULL,*s=NULL,*t=NULL,*lesstail=NULL,*greatertail=NULL; p = head; if(p->val>=x) { greaterhead = p; while(p&&p->val>=x) p = p->next; if(p) lesshead = p; else return head;// no value less than x } else { lesshead = p; while(p&&p->val<x) p = p->next; if(p) greaterhead = p; else return head;// no value greater than x } if(head->val<x) { p=head; while(p->next&&p->next->val<x) p = p->next; if(p->next==NULL) return head; lesstail = p; greaterhead = p->next; q=greaterhead; while(q->next&&q->next->val>=x) q = q->next; greatertail = q; lesstail->next = greatertail->next; q=lesstail; } else { p=head; while(p->next&&p->next->val>=x) p = p->next; if(p->next==NULL) return head; greatertail = p; lesshead = p->next; q=lesshead; } while(q->next) { if(q->next->val<x) q=q->next; else { s = q->next; q->next = s->next; greatertail->next = s; greatertail = greatertail->next; } } greatertail->next = NULL; q->next = greaterhead; return lesshead; } int _tmain(int argc, _TCHAR* argv[]) { ListNode *a = new ListNode(6); ListNode *b = new ListNode(5); ListNode *c = new ListNode(3); ListNode *d = new ListNode(1); ListNode *e = new ListNode(5); ListNode *f = new ListNode(4); a->next = b; b->next = c; c->next = d; d->next = e; e->next = f; ListNode *rethead=NULL; rethead = partition(a,3); ListNode *p = rethead; while(p!=NULL) { cout<<p->val<<" "; p = p->next; } system("pause"); return 0; }
下面的方法每次移动一段链表,不是一个个的移动,对于符合成段的用例时间应该会减少,但编译器的提交结果显示不是特别明显,反而时间还增加了。方法是对的。AC了。
ListNode *partition02(ListNode *head, int x) { if(head==NULL||head->next==NULL) return head; ListNode *lesshead=NULL,*greaterhead=NULL,*p=NULL,*q=NULL,*s=NULL,*t=NULL,*lesstail=NULL,*greatertail=NULL; s = head; if(s->val>=x) p = s; else { while(s->next&&s->next->val<x) s=s->next; p = s->next; } if(p==NULL) return head; q = p; while(q->next&&q->next->val>=x) q = q->next; t = q->next; if(t==NULL) return head; if (s->next==p) { s->next = t; lesshead = head; } else { lesshead = t; } greaterhead = p; greatertail = q; s = t; while(s->next) { while(s->next&&s->next->val<x) s=s->next; p = s->next; if(p==NULL) { s->next = greaterhead; greatertail->next =p; return lesshead; } q = p; while(q->next&&q->next->val>=x) q = q->next; t = q->next; if (t==NULL) { s->next = greaterhead; greatertail->next = p; return lesshead; } s->next = t; greatertail->next = p; greatertail = q; s = t; } if (s->next==NULL) { s->next = greaterhead; greatertail->next = NULL; } return lesshead; }
相关文章推荐
- Partition List leetcode
- LeetCode之Partition List
- leetcode Partition List二分链表问题
- Leetcode_partition-list
- (java)leetcode-86:Partition List
- 闲话链表(三) leetcode之Partition List
- leetcode_c++:链表:Partition List (086)
- [LeetCode 86] Partition List Solution
- Leetcode Partition List
- LeetCode之Partition List
- leetcode Partition List
- leetcode之Partition List,Reverse Nodes in k-Group
- leetcode — partition-list
- Leetcode-partition-list
- [LeetCode]Partition List@python
- LeetCode Partition List
- LeetCode Partition List
- LeetCode: Partition List [086]
- LeetCode Partition List
- LeetCode2.2.3 @ Partition List 链表划分 D3F3