3-6(鏈表相關算法)

今天主要完成了鏈表的5道算法題,不得不說leedcode和牛客網真是個好東西,點個贊。
一、反轉鏈表,如1->2->3->4->NULL,反過來打印。
思想:
第一種能夠利用單鏈表的頭插法來實現,定義一個新節點newnode,依次將一、二、三、4插到newnode,可是插完以後須要將newnode從新賦值到第一個節點。
第二種來利用迭代思想,定義n1,n2,n3分別爲NULL,頭節點head,頭結點的下一位head->next,n2->next=n1;ni=n2;n2=n3;這樣能夠將鏈表指針反向指過來。
二、移除單鏈表中爲val的值
思想:定義2個節點,一個爲cur,一個爲prev,利用pprev->next=cur->next,來刪除cur的節點,思想很簡單,可是須要注意:當刪除的元素爲第一個值和指針的移動
三、求鏈表的中間節點:
思想:利用快慢指針,快指針一次移動2個位置,慢指針一次移動一個位置,這樣當快指針爲空或者fast->next爲空時,慢指針恰好爲中間位置。須要注意一下 鏈表長度爲奇數和偶數時,其快指針的空形式不同。
四、合併2個有序鏈表
思想:定義2個指針,和一個新的newnode,首先比較一下2個鏈表的第一個元素誰比較小,把小的作頭,剩下的依次比較,把小的依次插到newnode後面,尾插法。
五、輸出一個鏈表的倒數第k個元素
思想:仍是能夠利用快慢指針的思想,可是選喲注意一點k的值不能大於鏈表的長度,不然輸出NULL。快指針提早移動k個位置,而後快慢指針再一塊兒移動,當快指針到達NULL時,慢指針恰好到達倒數第k個位置,由於快指針比慢指針多走了k個位置。node

相關文章
相關標籤/搜索