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