首页 > 试题广场 >

删除链表的节点

[编程题]删除链表的节点
  • 热度指数:65532 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。

1.此题对比原题有改动
2.题目保证链表中节点的值互不相同
3.该题只会输出返回的链表和结果做对比,所以若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点

数据范围:
0<=链表节点值<=10000
0<=链表长度<=10000
示例1

输入

{2,5,1,9},5

输出

{2,1,9}

说明

给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 2 -> 1 -> 9   
示例2

输入

{2,5,1,9},1

输出

{2,5,9}

说明

给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 2 -> 5 -> 9   

说明:本题目包含复杂数据结构ListNode,点此查看相关信息
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        res = ListNode(-1)
        res.next = head
        pre  =res
        while head:
            if head.val != val:
                pre = head
            else:
                pre.next =head.next
            head = head.next
        return res.next 
                

发表于 2022-09-08 19:13:49 回复(0)
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        dummy= ListNode(0)
        dummy.next = head
        cur = dummy
        while cur:
            if cur.next and cur.next.val == val:
                cur.next = cur.next.next
            cur = cur.next
        return dummy.next

class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        dummy = ListNode(0)
        dummy.next = head
        head = dummy
        stack = []
        while head:
            stack.append(head)
            head = head.next
            
        while stack:
            pre = stack[-1]
            if  pre.next and pre.next.val == val:
                pre.next = pre.next.next
            stack.pop()
        return dummy.next

发表于 2022-08-10 08:41:56 回复(0)
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # 删除结点为头结点
        if head.val == val: return head.next
        # 设置两个结点p1、p2:p1是删除结点p2的前一个结点
        p1 = head
        p2 = head.next
        while p2.val != val and p2:
            p2 = p2.next
            p1 = p1.next
        else:
            p1.next = p2.next
        return head

发表于 2022-07-17 21:08:40 回复(0)
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        vHead = ListNode(-1)
        vHead.next = head
        cur = vHead
        while cur.next:
            if cur.next.val == val:
                cur.next = cur.next.next
                break
            cur = cur.next
        
        return vHead.next

看着需要判断头结点的不太优雅,这里提供一个Python使用哨兵节点将头结点变成普通节点的方案哈~
发表于 2022-04-22 16:33:14 回复(1)
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        dummy=ListNode(-1)            #新增伪头部节点
        dummy.next=head            #伪头部的下一个指向head
        pre=dummy            #pre指针指向伪头部,用于删除下一节点
        while pre.next:           #当pre指针的下一个节点不空
            if pre.next.val==val:            #当找到
               pre.next=pre.next.next            #删除
               break
            pre=pre.next                #当找不到时继续遍历
        return dummy.next            #返回新的链表的头节点也就是伪头部的下一个节点
发表于 2022-03-23 17:22:11 回复(0)
#
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        myhead = ListNode(-1)
        myhead.next = head
        cur = head
        last = myhead
        while cur:
            if cur.val == val:
                last.next = cur.next
                break
            cur = cur.next
            last = last.next
        return myhead.next

发表于 2022-02-24 09:29:02 回复(0)
不太理解为什么这道题不能用递归写,自测通过了实际挂了,有人可以讲解一下吗?
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        if not head:
            return None
        if head.val == val:
            head = self.deleteNode(head.next, val)
        else:
            head.next = self.deleteNode(head.next, val)
        return head

发表于 2022-01-27 22:24:04 回复(0)
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param head ListNode类 
# @param val int整型 
# @return ListNode类
#
class Solution:
    def deleteNode(self , head: ListNode, val: int) -> ListNode:
        # write code here
        if head.val==val:#如果链表第一个节点就是要删除的直接输出剩余链表即可
            return head.next
        res=head
        while head and head.next:
            if head.next.val==val:
                head.next=head.next.next
                return res
            head=head.next

发表于 2021-12-22 16:11:20 回复(0)
class Solution:
    def deleteNode(self, head: ListNode, val: int) -> ListNode:
        if not head:
            return None
        # 辅助头结点
        node = ListNode(0)
        node.next, p = head, node
        while p.next:
            if p.next.val == val:
                p.next = p.next.next
                return node.next
            p = p.next
        return None

发表于 2021-11-11 16:26:36 回复(0)