【圖解連結串列類面試題】移除連結串列元素

hixiaoxiaoniao發表於2020-11-11

目錄

題目描述

題解


題目描述

題目地址:https://leetcode-cn.com/problems/remove-linked-list-elements/

刪除連結串列中等於給定值 val 的所有節點。
示例:

輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5

題解

這道題是要求我們刪除連結串列中指定的元素,也就是某些特定的節點。
如果已經遍歷到一個節點時,就無法刪除這個節點了,因為是單連結串列。
所以想要刪除某個節點,就必須找到這個節點的前一個節點,把前一個節點的指標改變,即指向下下一個就可以達到刪除的目的了。
動畫演示如下: 

java實現

class Solution {
	public ListNode removeElements(ListNode head, int val) {
		ListNode p = new ListNode(-1);
		p.next = head;
		//因為要刪除的可能是連結串列的第一個元素,所以用一個h節點來做處理
		//最後只要返回h的下一個節點即可
		ListNode h = p;
		//注意遍歷的條件是p.next不為空
		while(p.next!=null) {
			//如果p的下一個節點的值==val
			//P就指向下下一個,這就刪掉了指定的節點
			if(p.next.val==val) {
				p.next = p.next.next;
				//注意這裡的continue
				//因為迴圈最後還有一個P=p.next,所以要跳過
				continue;
			}
			//不用continue用else的方式也是可以的
			p = p.next;
		}
		return h.next;
	}
}

python實現

class Solution(object):
	def removeElements(self, head, val):
		"""
		:type head: ListNode
		:type val: int
		:rtype: ListNode
		"""
		p = ListNode(-1)
		# 因為要刪除的可能是連結串列的第一個元素,所以用一個h節點來做處理
		# 最後只要返回h的下一個節點即可
		p.next,h = head,p
		# 注意遍歷的條件是p.next不為空
		while p.next:
			# 如果p的下一個節點的值==val
			# P就指向下下一個,這就刪掉了指定的節點
			if p.next.val==val:
				p.next = p.next.next
				# 注意這裡的continue
				# 因為迴圈最後還有一個P=p.next,所以要跳過
				continue
			# 不用continue用else的方式也是可以的
			p = p.next
		return h.next

歡迎掃描關注公眾號 有更多圖解的演算法面試題等你哦~

相關文章