[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
相关文章
相关标签/搜索