python/golang 删除链表中的元素

Python删除链表中的元素

删除链表中的元素需要先遍历链表,找到需要删除的元素所在节点的前一个节点,然后通过修改指针来删除节点。

以下是删除链表中元素的Python代码示例:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def removeElement(self, head: ListNode, val: int) -> ListNode:
        dummy = ListNode(0)  # 创建一个哑节点
        dummy.next = head     # 哑节点指向原链表头结点
        prev, curr = dummy, head   # 初始化前序节点和当前节点
        while curr:     # 遍历整个链表
            if curr.val == val:
                prev.next = curr.next   # 删除当前节点
            else:
                prev = curr   # 更新前序节点
            curr = curr.next  # 移动当前节点到下一个节点
        return dummy.next  # 返回新链表头结点

示例

例如,对于链表 1 -> 2 -> 3 -> 4 -> 5,想要删除值为3的节点,可以调用该函数如下:

node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node4 = ListNode(4)
node5 = ListNode(5)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5

s = Solution()
result = s.removeElement(node1, 3)
while result:
    print(result.val, end=" ")
    result = result.next

输出为:1 2 4 5

Golang删除链表中的元素

删除链表中元素的过程与Python类似,同样需要遍历链表,找到需要删除的元素所在节点的前一个节点,然后通过修改指针来删除节点。

以下是删除链表中元素的Golang代码示例:

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeElements(head *ListNode, val int) *ListNode {
    dummy := &ListNode{0, head}   // 创建一个哑节点
    prev, curr := dummy, head     // 初始化前序节点和当前节点
    for curr != nil {     // 遍历整个链表
        if curr.Val == val {
            prev.Next = curr.Next   // 删除当前节点
        } else {
            prev = curr   // 更新前序节点
        }
        curr = curr.Next  // 移动当前节点到下一个节点
    }
    return dummy.Next  // 返回新链表头结点
}

示例

例如,对于链表 1 -> 2 -> 3 -> 4 -> 5,想要删除值为3的节点,可以调用该函数如下:

node1 := &ListNode{1, nil}
node2 := &ListNode{2, nil}
node3 := &ListNode{3, nil}
node4 := &ListNode{4, nil}
node5 := &ListNode{5, nil}
node1.Next = node2
node2.Next = node3
node3.Next = node4
node4.Next = node5

result := removeElements(node1, 3)
for result != nil {
    fmt.Printf("%d ", result.Val)
    result = result.Next
}

输出为:1 2 4 5

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python/golang 删除链表中的元素 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • C语言简明介绍常见关键字的用法

    C语言简明介绍常见关键字的用法 C语言作为一种广泛应用于系统编程和嵌入式开发的程序设计语言,在程序员中拥有广泛的用户群体。C语言中关键字的使用对于程序开发来说是至关重要的。在这里,我们将简明介绍一些C语言中常见关键字的用法。 数据类型关键字 C语言中有丰富的数据类型,每种类型都有其对应的关键字。在程序中正确使用这些关键字是确保数据类型正确运用的关键。 int…

    other 2023年6月27日
    00
  • jmeterjdbcrequest使用详解

    以下是详细讲解“jmeterjdbcrequest使用详解的完整攻略”: jmeterjdbcrequest使用详解 jmeterjdbcrequest是JMeter中用于执行JDBC请求的组件,可以用于测试数据库的性能和稳定性。本攻略将介绍jmeterjdbcrequest的使用方法和常用功能。 步骤一:添加JDBC驱动 在使用jmeterjdbcrequ…

    other 2023年5月10日
    00
  • WindowsXP终极优化设置大全

    WindowsXP终极优化设置大全攻略 WindowsXP作为一个经典的操作系统,在使用中可能存在一些不足之处,但是通过一些优化设置可以提升其性能和体验。本文将详细介绍WindowsXP终极优化设置大全的完整攻略,包括以下内容: 系统设置优化 软件程序优化 硬件驱动优化 网络优化设置 系统设置优化 1. 关闭无用的服务和应用程序 WindowsXP系统启动时…

    other 2023年6月28日
    00
  • android apk反编译,重新打包,签名

    Android APK反编译、重新打包、签名的完整攻略 Android APK反编译、重新打包、签名是一种常见的技术手段,可以帮助开发者分析和修改已有的Android应用程序。本文将为您提供详细的完整攻略,包括反编译、重新打包、签名等内容。 反编译 反编译是将已经编译好的APK文件还原成源代码的过程。常用的反编译工具有apktool和dex2jar。 使用a…

    other 2023年5月6日
    00
  • cad备份文件在哪里

    下面我将为您详细讲解如何备份CAD文件。 备份CAD文件的常用方法 在CAD软件内,备份文件有两种常用的方法: 复制文件 打开CAD软件后,选择要备份的文件,右键点击,选择“复制”,再右键点击要复制到的目录,选择“粘贴”。或者使用快捷键Ctrl+C和Ctrl+V进行复制和粘贴。这种方法适用于单个文件的备份。 存储文件 打开CAD软件后,选择“文件” – “另…

    其他 2023年4月16日
    00
  • 深入理解C语言中编译相关的常见错误

    深入理解C语言中编译相关的常见错误攻略 前言 编译是程序员生活中必备的技能之一,也往往是导致错误的地方之一。对编译过程有深入的理解,不仅可以帮助程序员更好地排查错误,还能提高编码能力。本文将从常见的编译错误着手,结合实例,探讨编译错误的原因和解决方法。 未声明函数 错误信息:undefined reference to ‘function_name’ 这种错…

    other 2023年6月26日
    00
  • 常用的压缩软件有哪些 五种常用压缩软件介绍

    常用的压缩软件有哪些 压缩软件是用于将文件或文件夹压缩成更小的文件,以便于存储和传输的工具。以下是五种常用的压缩软件的介绍: WinRAR:WinRAR 是一款功能强大的压缩软件,支持多种压缩格式,包括RAR、ZIP、7Z等。它具有高压缩比和快速压缩速度的特点,同时还支持加密和分卷压缩等功能。例如,你可以使用 WinRAR 压缩一个文件夹,并将其分成多个压缩…

    other 2023年7月28日
    00
  • 安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御

    安全性测试入门 (三):CSRF 跨站请求伪造攻击和防御 什么是 CSRF 攻击? CSRF(Cross-Site Request Forgery)中文名为跨站请求伪造,也叫 XSRF,是一种常见的Web攻击方式之一。攻击者在受害者不知情的情况下,利用受害者已登录的身份,在受害者不知情的情况下,完成恶意操作,如转账、修改密码、发邮件等等,从而导致安全问题。 …

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部