劍指offer 鍊錶

2021-07-22 05:37:07 字數 1492 閱讀 3537

單向鍊錶的結構定義

typedef int datatype; 

struct listnode

問題1、往鍊錶的末尾新增乙個結點

//給定頭結點,往末尾插入乙個結點

void insertnode(listnode **head,datatype key)

listnode *p=*head;

while(p->next!=

null)

p->next=q;

}

問題2、找到第乙個含有某值的結點並刪除該結點

void deletnode(listnode **head, datatype key)

while (p->next)

p=p->next;

}cout

delete

q;}

問題3、從尾到頭列印鍊錶

void  reverseprint(listnode *head)

cout<

問題4、找到鍊錶中的倒數第k個結點

//找到倒數第k個結點

listnode* findlastknode(listnode *head, int k)

if (i!=k-1)

return null;

listnode *p2=head;

while (p1->next)

return p2;

}

問題5、反轉鍊錶

//非遞迴實現

listnode *revesenode(listnode *head)

return pre;

}//遞迴實現

listnode *reversenode (listnode *oldhead,listnode *newhead)

問題6、複雜鍊錶的深度複製

//1.先複製乙個指標next並將對應的結點儲存在map中,之後遍歷mp指標連線對應的mp

//map儲存a-a',b-b'.......

map nodemap;

listnode * copylist(listnode *head)

return root;

}void completelist(listnode *root,listnode *head)

p1=p1->next;

}}//2.劍指offer給出的方案:將原來鍊錶擴大一倍,a->a』->b->b'->c->c'->d->d'->e->e',然後進行操作。

劍指offer 鍊錶

鍊錶 鍊錶是一種動態資料結構 struct listnode 往鍊錶的末尾新增乙個節點的c 程式如下 void addtotail listnode phead,int value 注意第乙個引數phead是乙個指向指標的指標。當我們往乙個空鍊錶插入乙個結點時,else pnode m pnext ...

劍指offer 鍊錶

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。思路1 遞迴版 class solution 找到當前節點與下乙個節點不重複的點,從不重複的點開始遞迴 return deleteduplication phead next else 思路2 非遞迴版 ...

鍊錶 劍指offer

從尾到頭列印鍊錶 思路 先把鍊錶翻轉,然後將翻轉後的鍊錶列印出來 這種方法 因為多分配鍊錶節點指標,故可能會對記憶體的消耗要大一點 時間複雜度為o n vector printlistfromtailtohead listnode head head p2 鍊錶翻轉後,頭結點為p2 while he...