1->乙個單鏈表l0->l1->l2->.......->ln-1->ln,翻轉鍊錶使其成為l0->ln->l1->ln-1.........不能通過改變結點的值來實現
解題方法:找到鍊錶的中間結點,斷開鍊錶,把後半部分鍊錶reverse一下,再合併兩個單鏈表。演算法的時間複雜度為o(n),空間複雜度為o(1)
listnode* reverse(listnode *head)
return p;
return null;
4->複雜鍊錶複製
解題方法:先複製鍊錶的每個結點,再設定鍊錶random指標的指向,最後將鍊錶拆分成兩個鍊錶。
struct randomlistnode
randomlistnode *copyrandomlist(randomlistnode *head)
else prev=cur;
return head;
10->乙個已經排序好的鍊錶,刪除所有出現過重複的節點。例如:1->1->1->2->3 返回鍊錶2->3
listnode *deleteduplicates(listnode *head) //刪除重複的最後乙個元素
prev->next=cur; prev=prev->next; cur=cur->next;
prev->next=cur;
return dummy->next;
11->將乙個鍊錶按照value x的值分割成兩部分,一部分值全都小於x,另一部分的值都大於等於x
listnode *partition(listnode *head,int x)
else
left_cur->next=right_dummy.next;
right_cur>next=null;
return left_dummy.next;
12->反轉鍊錶m到n的子鏈
listnode *reversebetween(listnode *head,int m,int n){
listnode dummy(-1); dummy.next=head;
/*找到要反轉的子鏈的前乙個結點*/
listnode *prev=&dummy;
for(int i=0;inext;
listnode *head2=prev;
/*反轉子鏈*/
prev=prev->next; lis***e* cur=prev->next;
for(int i=m;iprev->next=cur->next; cur->next=head2->next;
head2->next=cur; cur=prev->next; //頭插入法
return dummy.next;
13->兩個鍊錶中的值相加
listnode *addtwonumbers(listnode *l1,listnode *l2){
listnode dummy(-1); //頭結點
int carry=0;
listnode* prev=&dummy;
for(listnode *pa=l1,*pb=l2;pa!=null | pb!=null; pa=(pa==null)?null:pa-next,pb=(pb==null)?null:pb->next,prev=prev->next){
const int ia=(pa==null)?0:pa->val;
const int ib=(pb==null)?0:pb->val;
cont int value=(ia+ib+carry)/10; carry=(ia+ib+carry)/10;
pre->next=new listnode(value); //尾插入法
if(carry>0)
prev->next=new listnode(carry);
return dummy.next;
致我們終將忘記的演算法(棧的傷)
1 棧在括號匹配中的應用,乙個字串僅包含 這三種字元,判斷這個字串中的括號是否匹配 解題方法 利用棧的先進後出的功能 bool isvalid string const s stackstk for string iterator c s.begin c s.end c else if stk.em...
致我們終將忘記的演算法 隨處可見的經典 3
1 求字串中重複出現的最長子串 例如 字串drgabcdeabcfh中,最長重複出現的子串為 abc 解題方法 利用字尾樹來求解 字串的字尾樹 對於字串abcd來說 abcd bcd cd d 那麼要求字串中出現的最長重複子串,就是找出字尾樹中的最長公共字首 int commstr string s...
致我們終將逝去的青春
20幾歲的無知等於30幾歲的迷茫40幾歲的彷徨和50幾歲的無奈大學四年,白駒過隙,不要等失去後才懂得珍惜 人生可沒有彩排!二十幾歲的我們,正值青春年少,風華正茂。有的人抓住機遇,成就輝煌 有的人花天酒地,紙醉金迷.命運的轉折點就在這裡,你要不好好把握,就注定了將來的平庸無能 二十出頭的大學生,面對社...