首页 > 其他分享 >数据结构—链表

数据结构—链表

时间:2024-09-10 17:37:21浏览次数:9  
标签:current head self value next 链表 数据结构

一:链表

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

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

3、链表的功能

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

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

(3)插入 o(1):

(4)删除 o(1):

4、特点

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

5、链表的常用操作

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 移除链表元素

def func(head, val):
    k = 0
    for i in range(len(head)):
        if head[i] != val:
            head[k] = head[i]
            k += 1
    head = head[:k]
    return head
# 示例测试
head = [6,5,6,4,6,34,5]
val = 6
flag = func(head, val)
print(flag,end='')

题目206 反转链表

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))  # 输出: []

标签:current,head,self,value,next,链表,数据结构
From: https://www.cnblogs.com/gsupl/p/18406822

相关文章

  • 每日算法随笔:反转链表 II
    明白了!下面我将基于你给的两种方法来详细解释题解,并展示每一步的变化过程。题解:反转链表II这道题要求我们反转链表中从第left个节点到第right个节点的部分,返回反转后的链表。我们会使用两种方法:递归和迭代。示例解析示例1:输入:head=[1,2,3,4,5],left=2,ri......
  • 每日算法随笔:反转链表
    题解:反转链表这道题目要求我们将一个单链表进行反转,返回反转后的链表。链表的反转可以通过迭代和递归两种方法来实现。下面我们将详细解释这两种方法,并通过例子演示每一步的变化过程。方法一:迭代法思路:我们用三个指针来完成链表的反转:prev表示前一个节点,curr表示当前节......
  • Java-实现双向环形链表
            双向链表是一种常用的数据结构,其特点是每个节点不仅包含数据,还持有指向前一个节点和后一个节点的指针。与普通双向链表不同的是,它的哨兵节点的prev指向最后一个元素,而最后一个元素的next指向哨兵。        具体双向普通链表可以参考我的上篇文章,这里......
  • [Python手撕]排序链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defsortList(self,head:Optional[ListNode])->Optional[ListNode]:def......
  • 数据结构(王道考研书)
    第一章绪论1.1数据结构的基本概念1.1.1基本概念和术语     数据:是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。    数据元素:是数据的基本单位,通常作为一个整体......
  • 【数据结构】详细介绍各种排序算法,包含希尔排序,堆排序,快排,归并,计数排序
    目录1.排序1.1概念1.2常见排序算法2.插入排序2.1直接插入排序2.1.1基本思想2.1.2代码实现2.1.3特性2.2 希尔排序(缩小增量排序)2.2.1基本思想2.2.2 单个gap组的比较2.2.3 多个gap组比较(一次预排序)2.2.4 多次预排序2.2.5 特性3.选择排序3.1直......
  • 数据结构期末常见知识点
    1AOV网是一种有向无环图2所有的二叉树都满足度数为0的节点比度数为2的节点数多1,也都满足所有的度数*该度数节点的和等于总节点数减1只有完全二叉树满足当节点个数为奇数时,度数为1的点不存在,总节点个数吧......
  • 浙大数据结构慕课课后题(03-树3 Tree Traversals Again)
    题目翻译:题解:         #include<bits/stdc++.h>usingnamespacestd;voidCreatTree();voidsolve(intpreL,intinL,intpostL,intn);intPre[35],In[35],Post[35];int N;intmain(){ cin>>N; getchar(); CreatTree(); solve(0,0,0,N); for......
  • 数据结构与算法 第12天(排序)
    一、排序方法分类按照数据存储介质:内部排序:数据量不大、数据在内存,无需内外存交换数据外部排序:数据量较大、数据在外存(文件排序)将数据分批调入内存排序,结果放到外存按照比较器个数:串行排序:单处理机(同一时刻比较一对元素)并行排序:多处理机(同一时刻比较多对元素)按主......
  • 数据结构—单链表的基本操作
    目录1.单链表的初始化2.求表长操作3.按序号查找结点4.按值查找表结点5.插入结点操作6.删除结点操作7.头插法建立单链表8.尾插法建立单链表1.单链表的初始化 带头结点: boolInitList(LinkList&L){       //带头结点的单链表的初始化  L=(......