Remove all elements from a linked list of integers that have value val.
刪除鏈表中等於給定值 val 的全部節點。
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
想到常規解法是比較簡單的,由於是單向鏈表,不可以滑到指定節點再進行刪除,由於無法取到前一個節點。所以是經過判斷當前的節點的下一個節點的值是不是要刪除的值,若是是的話,那麼當前的節點的下一個節點替換成下下個節點,若是不是的話,繼續往下滑動。java
但這裏須要考慮一個特殊狀況,可能存在頭節點就是要刪除的節點的狀況,所以經過增長一個啞結點,啞結點的下一個節點記頭部節點,就能夠使用上面的邏輯了。python
Java版本code
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeElements(ListNode head, int val) { ListNode temp = new ListNode(0); temp.next = head; ListNode prev = temp; while(prev.next != null) { if (prev.next.val == val) { prev.next = prev.next.next; } else { prev = prev.next; } } return temp.next; } }
Python3版本element
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def removeElements(self, head: ListNode, val: int) -> ListNode: temp = ListNode(0) temp.next = head prev = temp while(prev.next != None): if (prev.next.val == val): prev.next = prev.next.next else: prev = prev.next return temp.next