劍指offer 鍊錶

2021-08-25 08:31:17 字數 1408 閱讀 3965

【14 鍊錶中倒數第k個節點】

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。

思路:1)如何建立鍊錶:head指向煉表頭,設定兩個指標,p為遍歷指標,q為新節點指標,

2)判斷鍊錶為空,鍊錶長度少於k個節點的情況

3)倒數第k個節點: 先行指標p先走k-1個指標,指向正序中第k個節點。q指向頭節點,p,q同時開始往後遍歷,p指向最後乙個節點的時候,q所指向的節點就是倒數第k個節點。

struct listnode 

};listnode* findkthtotail(listnode* plisthead, unsigned int k)

while(p->next!=null)

return q;

}

【15 反轉鍊錶】

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

思路:1)反轉鍊錶,主要就是將指標的方向進行逆向,要小心保留遍歷指標的位置。

listnode* reverselist(listnode* phead) 

//cout""head = q;

return head;

}

//主函式,主要是鍊錶的建立

int main()

else

p->next=q;

p = q;

} p->next = null;

p = head;

cin>>k;

cout<<"list:"p=p->next;

} coutp=p->next;

} return 0;

}

【16-合併兩個排序的鍊錶】

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

思路:1)判斷是否出現某一條鍊錶為空的情況

2)令list1為合併後的鍊錶(p1指向開始節點小的那條鍊錶)

list1:指標p1為待插入的位置,p1->next為比較的節點,p2指向下乙個位置

list2:同理,有q1,q2

合併時,比較p1->next與q1指向值大小,小於,則p1++;

大於,修改p1的next指標,指向q1,修改q1的next指標,指向p1->next

3) 判斷,list2 是否結束

listnode* merge(listnode* phead1, listnode* phead2)

p = p1;

while(p1->next!=null)

else

if(q1==null) //第二條鍊錶先結束

break;

} if(q1!=null)

return p;

}

劍指offer 鍊錶

單向鍊錶的結構定義 typedef int datatype struct listnode 問題1 往鍊錶的末尾新增乙個結點 給定頭結點,往末尾插入乙個結點 void insertnode listnode head,datatype key listnode p head while p nex...

劍指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 非遞迴版 ...