Gsupl.落浅~zbxGsupl.落浅~

03:32:14 PM

哥伦布

10°

数据结构—链表

Gsupl.落浅·2024-09-13 22:31·36 次阅读

数据结构—链表

一:链表

1、数组是连续的内存空间;而链表可以不一定是连续的内存空间

2、单端链表;从前一个元素指向后一个元素

3、链表的功能

(1)访问 o(n):数组是通过下表或者索引访问元素;链表是通过next指针以此递归的进行查询判断

(2)搜索 o(n):从头部遍历;知道找到位置

(3)插入 o(1):

(4)删除 o(1):

4、特点

写入非常的快;但是读非常的慢{value,next}

5、链表的常用操作

Copy
class ListNode: def __init__(self, value=0, next=None): self.value = value self.next = next#next为指向下一个节点的指针;next=None表示链表为空 class LinkedList: def __init__(self): self.head = None#指向链表的第一个节点 # 插入节点到链表的头部 def insert_at_head(self, value): new_node = ListNode(value)#创建一个新节点;值=value new_node.next = self.head#将新节点的next指针指向当前的头节点 self.head = new_node#更新链表的头节点 # 插入节点到链表的尾部 def insert_at_tail(self, value): new_node = ListNode(value)#创建一个新的节点 if not self.head:#如果没有头节点 self.head = new_node#新创建的节点作为头节点 else: current = self.head#否则遍历链表;找到最后一个节点;将新的节点插入到最后的节点当中 while current.next: current = current.next current.next = new_node # 删除链表中第一个匹配的节点 def delete_node(self, value): current = self.head if not current: return # 如果要删除的节点是头节点 if current.value == value: self.head = current.next return # 找到要删除的节点并移除它 while current.next: if current.next.value == value: current.next = current.next.next return current = current.next # 打印链表 def print_list(self): current = self.head while current: print(current.value, end=" -> ") current = current.next print("None")

二:刷题

题目203 移除链表元素
(1)思路:首先定义一个虚拟的节点dummy;这个虚拟的节点的目的就是为了防止头节点移动的时候元素丢失;然后在定义一个虚拟的节点current;这个节点的目的就是为了记录head节点移动前的位置;也是为了遍历链表;整体思路就是:如果当前链表的元素等于val;那么就跳过当前的节点继续遍历;如果当前的节点不等于目标值的话,那么就正常的进行遍历!

Copy
#初始化链表 class ListNode: def __init__(self,val=0,next=None): self.val=val self.next=next class Solution: def removeElements(self, head: ListNode, val: int) -> ListNode: dummy=ListNode(0) dummy.next=head current=dummy while current.next: if current.next.val==val: current.next=current.next.next else: current=current.next return dummy.next

题目206 反转链表

Copy
from typing import Optional class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: # 集成你想使用的函数,这次实现反转链表 def func(head): if head is None: print(head, end="") return None prev = None current = head while current is not None: next_node = current.next current.next = prev prev = current current = next_node return prev return func(head) # 辅助函数:将列表转换为链表 def list_to_linkedlist(lst): if not lst: return None head = ListNode(lst[0]) current = head for item in lst[1:]: current.next = ListNode(item) current = current.next return head # 辅助函数:将链表转换为列表 def linkedlist_to_list(node): result = [] while node: result.append(node.val) node = node.next return result # 示例测试 head_list = [] # 空列表表示空链表 head = list_to_linkedlist(head_list) solution = Solution() reversed_head = solution.reverseList(head) print(linkedlist_to_list(reversed_head)) # 输出: []
posted @   Gsupl.落浅~  阅读(36)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示

目录导航

一:链表
二:刷题