[LeetCode-203] Remove Linked List Elements

題目要求

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
相關文章
相關標籤/搜索