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