数据结构与算法之链表 链表压缩 删除重复节点 实践

数据结构与算法阿木 发布于 2025-07-11 6 次阅读


链表压缩:删除重复节点实践

链表是一种常见的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表在处理动态数据时非常灵活,但在存储和操作上可能存在一些问题,如重复节点的存在。链表压缩,即删除重复节点,是链表操作中的一个重要任务。本文将围绕链表压缩这一主题,通过代码实践来探讨其实现方法。

链表概述

在开始链表压缩之前,我们先简要回顾一下链表的基本概念。

链表的定义

链表是一种线性数据结构,由一系列节点组成,每个节点包含两部分:数据和指向下一个节点的指针。链表中的节点不连续存储,因此可以动态地插入和删除节点。

链表的类型

1. 单向链表:每个节点只有一个指向下一个节点的指针。

2. 双向链表:每个节点有两个指针,一个指向前一个节点,一个指向下一个节点。

3. 循环链表:链表的最后一个节点的指针指向链表的第一个节点。

链表的特点

- 动态性:链表可以根据需要动态地插入和删除节点。

- 非连续存储:链表中的节点可以存储在内存中的任意位置。

- 无固定长度:链表可以根据需要动态地增加或减少节点。

链表压缩原理

链表压缩的目标是删除链表中的重复节点,使得链表中每个节点的数据都是唯一的。以下是链表压缩的基本原理:

1. 遍历链表,比较当前节点和下一个节点的数据。

2. 如果发现数据相同,则删除下一个节点。

3. 如果数据不同,则移动到下一个节点,继续比较。

代码实现

下面我们将使用Python语言来实现一个单向链表压缩的函数。

定义链表节点

python

class ListNode:


def __init__(self, value=0, next=None):


self.value = value


self.next = next


链表压缩函数

python

def compress_list(head):


if not head or not head.next:


return head

current = head


while current and current.next:


if current.value == current.next.value:


current.next = current.next.next


else:


current = current.next


return head


测试链表压缩

python

创建链表 1 -> 2 -> 2 -> 3 -> 4 -> 4 -> 5


head = ListNode(1)


head.next = ListNode(2)


head.next.next = ListNode(2)


head.next.next.next = ListNode(3)


head.next.next.next.next = ListNode(4)


head.next.next.next.next.next = ListNode(4)


head.next.next.next.next.next.next = ListNode(5)

压缩链表


compressed_head = compress_list(head)

打印压缩后的链表


current = compressed_head


while current:


print(current.value, end=' -> ')


current = current.next


输出结果


1 -> 2 -> 3 -> 4 -> 5 ->


总结

本文通过代码实践探讨了链表压缩这一主题。我们首先介绍了链表的基本概念和类型,然后阐述了链表压缩的原理,并使用Python语言实现了一个单向链表压缩函数。通过测试,我们验证了该函数的正确性。链表压缩是链表操作中的一个重要任务,对于维护链表数据的唯一性和提高链表操作效率具有重要意义。