刪除鍊錶中等於給定值 val 的所有節點。
題目源於領扣:
輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
分析:
刪除元素過程(以c++**為例)
如圖:
注意:
當刪除的節點就是頭結點時,新的頭結點(即cur->next
)就是null,滿足刪除指定val的所有元素的條件。
當判斷完結點是否為頭結點時,不能漏掉cur=cur->next
這一句,因為指定val值的元素不止乙個,所以在刪除乙個結點之後,還要讓cur
繼續向後走,繼續排查。
下面的c++**和c語言**有一點點細微的差別,c語言中有一句free(cur)
,但c++**中沒有,需要注意是,c語言中的鍊錶結點是乙個結構體,是由malloc開闢出來的空間,所以使用free來釋放這段記憶體空間,是真正意義的將結點刪除。而在c++**中,涉及到類和物件,使用free釋放記憶體僅僅釋放了物件的記憶體,而沒有呼叫析構函式,正確的刪除物件需要delete,所以這裡c++**中不用free,刪除節點實質上是將目標結點覆蓋。
完整**:
c++:
/**
* definition for singly-linked list.
* struct listnode
* };
*/class solution
//當鍊表不為空
while(cur)
else
cur=cur->next;
}else
}return head;}};
c:
/**
- definition for singly-linked list.
- struct listnode ;
*/struct listnode* removeelements(struct listnode* head, int val)
else
free(cur);
cur = next;
}else
}return head;
}
移除鍊錶元素 刪除所有val的節點
如圖我們要刪除值為val的所有元素 我的思路 1.出於空間複雜度的考慮我們這只例項化乙個節點node用來當作刪除後鍊錶的頭節點 2.我們用node1 node記錄頭節點 3.當head null時我們判斷head.val vall如果是true 則使node.next head.next 4.否則 ...
刪除鍊錶中所有值為val的節點
題目描述 問題 1 2 3 4 val 2 要求輸出為 1 3 4 解題思路 1 遍歷一遍鍊錶,對比每個節點,刪除值為val的節點 2 需要注意的點 一般來說遍歷都是從頭開始,但是在這種沒有頭節點的鍊錶中勢必要考慮若第乙個節點就為所要刪除的節點時該如何解決 if head return head w...
刪除鍊錶中等於給定值val的所有節點
刪除鍊錶中等於給定值val的所有節點 例如 給出鍊錶1 2 3 3 4 5 3,和 val 3,你需要返回刪除3之後的鍊錶 1 2 4 5 way1 迭代 追加人為表頭 陷入沒有表頭的陷阱,總是想記下刪除節點的先驅,導致折騰了很久,其實只要人為加乙個表頭就簡單很多了!definition for s...