📌  相关文章
📜  从链表中删除最后一次出现的项目(1)

📅  最后修改于: 2023-12-03 15:36:20.883000             🧑  作者: Mango

从链表中删除最后一次出现的项目

在链表中删除某个项目一般需要找到该项目的位置,然后将该位置的节点与其前后节点连接起来以删除该节点。本文介绍如何在链表中删除最后一次出现的某个项目。

实现思路
  1. 遍历链表,找到最后一次出现该项目的位置。
  2. 删除该位置的节点。
代码实现

以下是一个基于Python的链表实现以及从链表中删除最后一次出现的项目的代码示例。

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


class LinkedList:
    def __init__(self):
        self.head = None

    def insert(self, val):
        node = Node(val)
        if self.head is None:
            self.head = node
        else:
            curr = self.head
            while curr.next:
                curr = curr.next
            curr.next = node

    def remove_last_occurrence(self, val):
        if self.head is None:
            return
        prev, curr = None, self.head
        last_occurrence = None
        while curr:
            if curr.val == val:
                last_occurrence = prev
            prev, curr = curr, curr.next
        if last_occurrence is None:
            self.head = self.head.next
        else:
            last_occurrence.next = last_occurrence.next.next

    def __repr__(self):
        res = []
        curr = self.head
        while curr:
            res.append(str(curr.val))
            curr = curr.next
        return ' -> '.join(res)

使用示例:

linkedList = LinkedList()
linkedList.insert(1)
linkedList.insert(2)
linkedList.insert(3)
linkedList.insert(2)
linkedList.insert(4)

print(linkedList)  # 1 -> 2 -> 3 -> 2 -> 4

linkedList.remove_last_occurrence(2)

print(linkedList)  # 1 -> 2 -> 3 -> 4

在这个示例中,我们创建一个包含1、2、3、2和4的链表。然后,我们调用remove_last_occurrence函数,将链表中最后一次出现的2删除。最后,我们打印出修改后的链表,结果是1、2、3和4。

以上就是一个简单的从链表中删除最后一次出现的项目的实现。