题意
删除链表中等于给定值 val 的所有节点;
解题思路
把下个结点的值赋值给当前结点,删除下一个结点;
增加一个多余的头结点,方便记录下前结点,将前结点指向下个结点,删除当前结点;
实现
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None class Solution(object): def removeElements(self, head, val): """ :type head: ListNode :type val: int :rtype: ListNode """ node = head while node and node.val != val: node = node.next while node: if node.val == val: # 把下个结点的值赋值给当前结点,实际是删除下一个结点 if node.next != None: node.val = node.next.val node.next = node.next.next elif head == node: # 头结点 head = None break else: # 尾结点 cur = head while cur.next and cur.next != node: cur = cur.next cur.next = None break else: node = node.next return head def removeElements(self, head, val): """ :type head: ListNode :type val: int :rtype: ListNode """ # 新增一个起始结点,方便获取前结点(比如在删除首结点的时候) start = ListNode(0) start.next = head prev = start cur = head while cur is not None: if cur.val != val: prev = cur cur = cur.next else: prev.next = cur.next cur = prev.next return start.next def removeElements(self, head, val): """ :type head: ListNode :type val: int :rtype: ListNode """ try: while head.val == val: head = head.next cur = head nex = cur.next while nex: if nex.val != val: cur.next = nex cur = cur.next nex = nex.next if cur.next.val == val: cur.next = None except: True return head