動機
Linus Torvalds的雙層ptr的推廣文
原本刪node的方式
ptr指到node,所以要記錄prev,因為不知道下一個是誰,還要處理在head刪的問題
def delNode(head, target):
prev, cur = None, head
while cur:
if cur is target:
if prev:
prev.next = cur.next
else:
return cur.next
return head
用雙層ptr
現在我們看next本身!!
next本身有
- 自己的node下一步到哪
- 下一個node的位置
所以只要看到下一個node是target就可以直接改next!!
Node* delNode(Node* head, Node* target) {
Node** next = &(head->next);
for (;*next && *next != target; next = &(*next)->next) ;
// 當跳出去時一個是到底,一個是下一個是target
if (*next)
*next = target->next; // 直接改next的內容
}