我要好offer之 鍊錶大總結

2022-07-08 18:30:20 字數 1748 閱讀 8580

單鏈表是一種遞迴結構,可以將單鏈表看作特殊的二叉樹(我把它叫做一叉樹)

單鏈表的定義:

/*

* * definition for singly-linked list.

* struct listnode

* };

*/

1. o(1)時間刪除結點

listnode* deletenode(listnode* phead, listnode*deletednode)  

else

cur->next =null;

delete deletednode;

deletednode =null;

return

newhead.next;

} else

}}

2. 單鏈表反轉

listnode* reverselist(listnode*phead) 

listnode* tail =phead;

listnode* cur = phead->next;

while (cur !=null)

tail

->next = null;

return

phead;

}

3. 單鏈表倒數第k個結點

listnode* kthnode(listnode* phead, int

k)

if (first ==null)

else

}while (first !=null)

return

second;

}

4. 單鏈表反轉部分區間

5. 單鏈表快速排序的一趟劃分

6. 單鏈表去掉重複元素

7. 單鏈表旋轉

8. 單鏈表成對交換節點

9. 有序單鏈表歸併排序

10. 單鏈表加法運算

11. 單鏈表是否存在環,環的位置

12. 兩個單鏈表的第乙個公共結點

13. 單鏈表歸併排序

class

solution

listnode* slow =head;

listnode* fast =head;

//快慢指標找鍊錶中間結點

while (fast != null && fast->next != null && fast->next->next !=null)

listnode* list1 =head;

listnode* list2 = slow->next;

slow->next =null;

listnode* sortlist1 =sortlist(list1);

listnode* sortlist2 =sortlist(list2);

listnode* res =mergesortlist(sortlist1, sortlist2);

return

res;

}listnode* mergesortlist(listnode* list1, listnode*list2)

else

}while (node1 !=null)

while (node2 !=null)

return

newhead.next;

}};

我的鍊錶總結

鍊錶的難點是 操作列表的結點指標的能力 快慢指標找中點listnode slow head listnode fast head while fast null fast.next null 這個if是為了獲得純後半段的起始結點,不包括鍊錶的中心點,只對鍊錶個數是奇數的起作用。if fast nul...

劍指offer之鍊錶 鍊錶型別所有題總結

劍指 offer 22 鍊錶中倒數第k個節點 劍指 offer 24 反轉鍊錶 劍指 offer 18 刪除鍊錶的節點 劍指 offer 35 複製鍊錶的複製 劍指 offer 52 兩個鍊錶的第乙個公共節點 本篇文章記錄劍指offer標籤為鍊錶的題。下面的題都是在力扣上面做的,可以按照題名搜尋即可...

總結之鍊錶

1.鍊錶的基本操作 head表示是第乙個節點,我們會通常在第乙個節點前加乙個dummy節點。這樣可以避免處理頭指標,統一處理所有的情況,最後返回dummy next。比如說,我們在刪除節點的時候,在第k個元素前插入節點。這些情況都隱含包括頭節點場景,用dummy節點可以統一處理,不用單獨拎出來。另外...