如何删除Linked List中的节点

发布时间:2021-12-23 17:30:50 作者:柒染
来源:亿速云 阅读:163

如何删除Linked List中的节点

在计算机科学中,链表(Linked List)是一种常见的数据结构,它由一系列节点(Node)组成,每个节点包含数据和指向下一个节点的指针。链表的一个重要操作是删除节点。本文将详细介绍如何在单链表(Singly Linked List)和双链表(Doubly Linked List)中删除节点。

单链表中的节点删除

在单链表中,每个节点只有一个指针,指向下一个节点。要删除一个节点,我们需要找到它的前一个节点,并将其指针指向被删除节点的下一个节点。

删除指定值的节点

假设我们要删除链表中第一个值为val的节点,可以按照以下步骤进行:

  1. 处理特殊情况:如果链表为空,直接返回。
  2. 处理头节点:如果头节点的值等于val,将头节点指向下一个节点。
  3. 遍历链表:从头节点开始遍历链表,找到值为val的节点的前一个节点。
  4. 删除节点:将前一个节点的指针指向被删除节点的下一个节点。

以下是Python代码示例:

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

def deleteNode(head, val):
    # 处理特殊情况
    if not head:
        return None
    
    # 处理头节点
    if head.val == val:
        return head.next
    
    # 遍历链表
    current = head
    while current.next:
        if current.next.val == val:
            # 删除节点
            current.next = current.next.next
            return head
        current = current.next
    
    return head

删除指定位置的节点

如果要删除链表中第n个节点,可以按照以下步骤进行:

  1. 处理特殊情况:如果链表为空或n小于1,直接返回。
  2. 处理头节点:如果n等于1,将头节点指向下一个节点。
  3. 遍历链表:从头节点开始遍历链表,找到第n-1个节点。
  4. 删除节点:将第n-1个节点的指针指向第n+1个节点。

以下是Python代码示例:

def deleteNodeAtPosition(head, n):
    # 处理特殊情况
    if not head or n < 1:
        return None
    
    # 处理头节点
    if n == 1:
        return head.next
    
    # 遍历链表
    current = head
    count = 1
    while current and count < n - 1:
        current = current.next
        count += 1
    
    # 删除节点
    if current and current.next:
        current.next = current.next.next
    
    return head

双链表中的节点删除

在双链表中,每个节点有两个指针,一个指向前一个节点,一个指向下一个节点。要删除一个节点,我们需要更新其前一个节点和后一个节点的指针。

删除指定值的节点

假设我们要删除链表中第一个值为val的节点,可以按照以下步骤进行:

  1. 处理特殊情况:如果链表为空,直接返回。
  2. 处理头节点:如果头节点的值等于val,将头节点指向下一个节点,并更新新头节点的前一个指针为None
  3. 遍历链表:从头节点开始遍历链表,找到值为val的节点。
  4. 删除节点:更新前一个节点的next指针和后一个节点的prev指针。

以下是Python代码示例:

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

def deleteNode(head, val):
    # 处理特殊情况
    if not head:
        return None
    
    # 处理头节点
    if head.val == val:
        new_head = head.next
        if new_head:
            new_head.prev = None
        return new_head
    
    # 遍历链表
    current = head
    while current:
        if current.val == val:
            # 删除节点
            if current.prev:
                current.prev.next = current.next
            if current.next:
                current.next.prev = current.prev
            return head
        current = current.next
    
    return head

删除指定位置的节点

如果要删除链表中第n个节点,可以按照以下步骤进行:

  1. 处理特殊情况:如果链表为空或n小于1,直接返回。
  2. 处理头节点:如果n等于1,将头节点指向下一个节点,并更新新头节点的前一个指针为None
  3. 遍历链表:从头节点开始遍历链表,找到第n个节点。
  4. 删除节点:更新前一个节点的next指针和后一个节点的prev指针。

以下是Python代码示例:

def deleteNodeAtPosition(head, n):
    # 处理特殊情况
    if not head or n < 1:
        return None
    
    # 处理头节点
    if n == 1:
        new_head = head.next
        if new_head:
            new_head.prev = None
        return new_head
    
    # 遍历链表
    current = head
    count = 1
    while current and count < n:
        current = current.next
        count += 1
    
    # 删除节点
    if current:
        if current.prev:
            current.prev.next = current.next
        if current.next:
            current.next.prev = current.prev
    
    return head

总结

删除链表中的节点是链表操作中的基本操作之一。无论是单链表还是双链表,删除节点的核心思想都是更新相关节点的指针。通过理解链表的结构和指针操作,我们可以轻松实现节点的删除操作。希望本文能帮助你更好地理解和掌握链表节点的删除方法。

推荐阅读:
  1. [LeetCode]237. Delete Node in a Linked List
  2. [LeetCode]206. Reverse Linked List

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linked list

上一篇:Dubbo-admin服务器怎么部署

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》