互联网面试突击算法-链表

链表(Linked List)是一种常见的线性数据结构,由一系列节点(Node)组成。每个节点包含数据和指向下一个节点的引用,形成了一个链式的数据结构。

链表的特点如下:

  1. 动态性:链表的长度可以根据需要动态增长或缩小,相比于数组,不需要提前分配固定大小的内存空间。

  2. 灵活性:链表的节点可以在运行时插入、删除或修改,而不需要像数组那样进行元素的移动。

  3. 内存分配:链表的节点可以在内存中分散存储,不要求连续的内存空间,而数组需要一块连续的内存空间。

链表可以分为几种常见的类型:

  1. 单向链表(Singly Linked List):每个节点包含数据和指向下一个节点的引用。

  2. 双向链表(Doubly Linked List):每个节点除了包含数据和指向下一个节点的引用外,还包含指向前一个节点的引用。

  3. 循环链表(Circular Linked List):链表的最后一个节点指向头节点,形成一个循环。

链表的常见操作如下:

  1. 插入(Insertion):在链表的特定位置插入一个新节点。

  2. 删除(Deletion):从链表中删除特定位置的节点。

  3. 查找(Search):在链表中搜索特定值的节点。

  4. 遍历(Traversal):按照顺序访问链表中的每个节点。

以下是使用Python实现的简单单向链表的示例代码:

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

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

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = new_node

    def delete(self, data):
        if not self.head:
            return
        if self.head.data == data:
            self.head = self.head.next
        else:
            current = self.head
            while current.next:
                if current.next.data == data:
                    current.next = current.next.next
                    return
                current = current.next

    def search(self, data):
        current = self.head
        while current:
            if current.data == data:
                return True
            current = current.next
        return False

    def display(self):
        elements = []
        current = self.head
        while current:
            elements.append(current.data)
            current = current.next
        return elements

# 测试代码
linked_list = LinkedList()
linked_list.append(1)
linked_list.append(2)
linked_list.append(3)
print(linked_list.display())  # 输出:[1, 2, 3]
linked_list.delete(2)
print(linked_list.display())  # 输出:[1, 3]
print(linked_list.search(3))  # 输出:True
print(linked_list.search(2))  # 输出:False

在上述示例中,我们使用节点类(Node)和链表类(LinkedList)实现了一个简单的单向链表。节点类包含数据和指向下一个节点的引用。链表类包含头节点(head),可以通过追加(append)方法在链表末尾插入新节点,通过删除(delete)方法删除特定值的节点,通过搜索(search)方法在链表中查找特定值的节点,通过显示(display)方法遍历链表并返回节点的值列表。

链表在计算机科学中有广泛的应用,例如实现其他数据结构(如队列和栈)、管理内存分配、构建图和树等。它提供了一种灵活而动态的数据结构,适用于各种不同的场景和问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值