致我們終將忘記的演算法(單鏈表那些事)

2021-06-25 10:53:10 字數 1938 閱讀 9135

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幾歲的無奈大學四年,白駒過隙,不要等失去後才懂得珍惜 人生可沒有彩排!二十幾歲的我們,正值青春年少,風華正茂。有的人抓住機遇,成就輝煌 有的人花天酒地,紙醉金迷.命運的轉折點就在這裡,你要不好好把握,就注定了將來的平庸無能 二十出頭的大學生,面對社...