python刷题之链表常见操作

2023-05-16

链表常用操作

也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)

from collections import deque
linkedlist=deque()
#Add element
#Time Complexity: 0(1)
linkedlist.append( 1)
linkedlist.append(2)
linkedlist.append( 3)#[1,2,3]
print( linkedlist)

#Insert element
#Time Complexity: 0(N)
linkedlist.insert(2,99)#[1,2,99,3]
print( linkedlist)
# Access e lement
# Time Complexity: 0(N )
element = linkedlist[2 ]
# 99
print( element )
# Search e lement
# Time Complexity: 0(N )
index = linkedlist. index(99 )
#2
print(index)
# Update element 查找+更改
# Time Complexity: 0(N )
linkedlist[2] = 88
# [1,2,88,3 ]
print( linkedlist )
# remove e lement
# Time Complexity: 0(N)
# del linkedlist[2 ]
linkedlist. remove( 88 )
# [1,2,3]
print( linkedlist )

链表练习

203. 移除链表元素

难度简单549收藏分享切换为英文接收动态反馈

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

 

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7

增加头结点

# Definition for singly-linked list.
# 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:
        while(head and head.val==val):
            head=head.next
        if head is None:
            return head;
        pre=head
        while pre.next:
            if(pre.next.val==val):
                pre.next=pre.next.next
            else:
                pre= pre.next
        return head

双指针 (删除头结点时另做考虑)注意可能头结点需要删除几次

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
def removeElements(head: ListNode, val):
    pre = ListNode(0)
    pre.next = head
    a = pre
    while head is not None:
        if (head.val == val):
            a.next = head.next
        else:
            a = a.next
        head = head.next
    return pre.next

 

递归实现

# Definition for singly-linked list.
# 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:
        if not head: return head
        head.next = self.removeElements(head.next, val)
        return head.next if head.val == val else head

参考网上的不是很简便

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

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

    def initList(self, data):
        # 创建头结点
        self.head = ListNode(data[0])
        r=self.head
        p = self.head
        # 逐个为 data 内的数据创建结点, 建立链表
        for i in data[1:]:
            node = ListNode(i)
            p.next = node
            p = p.next
        return r
    def printlist(self,head):
        if head == None: return
        node = head
        while node != None:
            print(node.val,end=' ')
            node = node.next
def removeElements(head: ListNode, val):
    pre = ListNode(0)
    pre.next = head
    a = pre
    while head is not None:
        if (head.val == val):
            a.next = head.next
        else:
            a = a.next
        head = head.next
    return pre.next
l=LinkList()
a=[7,7,7,1]
head=l.initList(a)
l.printlist(head)
val=7
l.printlist(removeElements(head, val))

 

206 反转一个链表

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        pre = ListNode(0)
        pre.next = head
        while (head and head.next):
            a = pre.next
            hr = head.next
            head.next = hr.next
            pre.next = hr
            hr.next = a
        return pre.next

 

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        # 申请两个节点,pre和 cur,pre指向None
        pre = None
        #pre.next = None
        cur = head
        # 遍历链表,while循环里面的内容其实可以写成一行
        # 这里只做演示,就不搞那么骚气的写法了
        while cur:
            # 记录当前节点的下一个节点
            tmp = cur.next
            # 然后将当前节点指向pre
            cur.next = pre
            # pre和cur节点都前进一位
            pre = cur
            cur = tmp
        return pre	

递归:图解参考https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
	def reverseList(self, head):
		"""
		:type head: ListNode
		:rtype: ListNode
		"""
		# 递归终止条件是当前为空,或者下一个节点为空
		if(head==None or head.next==None):
			return head
		# 这里的cur就是最后一个节点
		cur = self.reverseList(head.next)
		# 这里请配合动画演示理解
		# 如果链表是 1->2->3->4->5,那么此时的cur就是5
		# 而head是4,head的下一个是5,下下一个是空
		# 所以head.next.next 就是5->4
		head.next.next = head
		# 防止链表循环,需要将head.next设置为空
		head.next = None
		# 每层递归函数都返回cur,也就是最后一个节点
		return cur

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python刷题之链表常见操作 的相关文章

  • 如何快速了解一个领域/写综述

    1 先去找本领域的综述 xff08 最新 xff09 文章刚开始可以是中文方便理解 2 去找本领域硕博论文选一个高引用的去看 3 选择本领域经典论文 现在知网 万方等数据库都有文献推荐如下 以知网为例 选择知识追踪综述 改进知识追踪模型对提
  • LaTeX快速入门

    可参考文件 LaTeX零基础入门教程https www jianshu com p 3e842d67ada2 各种小技巧https zhuanlan zhihu com p 56024243 查看本地说明文档 ctex宏包的使用方法 查看c
  • 面向个性化学习的数据挖掘方法与应用研究1

  • EKPT模型

    面向个性化学习的数据挖掘方法与应用研究2 EKPT模型
  • docker搭建PyPI服务器

    运行 docker 服务器添加用户使用方法 上传 package使用仓库安装 package 运行 docker 服务器 首先创建服务器文件存放目录 xff08 如 pypi xff09 xff0c 进入目录 使用镜像 codekoala
  • 高维数据可视化之t-SNE算法

    https blog csdn net hustqb article details 78144384 t sne数学原理https zhuanlan zhihu com p 57937096 什么是t SNE xff1f t SNE的主要
  • Dynamic Key-Value Memory Networks for Knowledge Tracing论文阅读

    DKVMN模型效果不是很好 xff0c 但提供了很多新颖的方法思路 xff0c 最近看几篇文章都重点提到了这个模型并对这个模型进行改进 xff0c 回头仔细看一下这篇论文 动机 将KT公式化为监督序列学习问题 BKT和DKT 本文模型 本文
  • 记忆网络外部存储器

    结构化的外部记忆 记忆网络通常由四个模块构成 xff1a 主网络 外部记忆单元 读取模块 以及写入模块 主网络 也叫做控制器 xff0c 任务是解决内容和外界的交互 外部记忆单元负责存储信 息 xff0c 由很多记忆片段组成 xff0c 它
  • 简单爬虫入门

    来源莫烦爬虫 https mofanpy com tutorials data manipulation scraping understand website 爬网页流程 选着要爬的网址 url 使用 python 登录上这个网址 url
  • 正则表达式

    正则表达式这一篇就够了 xff0c 记录学习方便回来查找 文章来源https mofanpy com tutorials python basic basic regular expression https www cnblogs com
  • 数据可视化之 Matplotlib

    可参考 https mofanpy com tutorials data manipulation plt 基本用法 set new sticks new ticks 61 np linspace 1 2 5 print new ticks
  • 爬虫学习之下载图片

    首先找到网页的图片地址如 网址为 xff1a https i0 hdslb com bfs face 03525d094e0e2a142d08181532d729615c18ec92 jpg 找到了这个网址 我们就能开始下载了 为了下载到一
  • Python刷题之两数之和

    刷题之旅开始 day1 给定一个整数数组 nums 和一个整数目标值 target xff0c 请你在该数组中找出 和为目标值 的那 两个 整数 xff0c 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 xff0c 数组中
  • day2两数相加

    给你两个 非空 的链表 xff0c 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 xff0c 并且每个节点只能存储 一位 数字 请你将两个数相加 xff0c 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 x
  • day3三数之和

    给你一个包含 n 个整数的数组 nums xff0c 判断 nums 中是否存在三个元素 a xff0c b xff0c c xff0c 使得 a 43 b 43 c 61 0 xff1f 请你找出所有和为 0 且不重复的三元组 注意 xf
  • Nginx常见日志分析

    日志格式 39 remote addr remote user time local 34 request 34 status body bytes sent 34 http referer 34 34 http user agent 34
  • python爬虫入门之http协议和 Chrome 浏览器抓包工具

    在浏览器中发送一个http请求的过程 1 当用户在浏览器的地址栏中输入一个URL并按回车键之后 xff0c 浏览器会向HTTP服务器发送HTTP请求 HTTP请求主要分为 Get 34 和 Post 34 两种方法 当我们在浏览器输入URL
  • python爬虫之urllib库学习

    urllib库 urllib库是Python中一个最基本的网络请求库 可以模拟浏览器的行为 xff0c 向指定的服务器发送一个请求 xff0c 并可以保存服务器返 回的数据 urllib库是python内置的一个http请求库 xff0c
  • 爬虫练习之了解反爬虫机制

    没学习之前我理解字面意思就是你爬虫网站 xff0c 然后该网站顺着你的ip等会对你的网络电脑等造成损失 爬虫 使用任何技术手段批量获取网站信息的一种方式 xff0c 关键在批量 反爬虫 使用任何技术手段 xff0c 阻止别人批量获取自己网站
  • python爬虫之cookie

    python爬虫之cookie 什么是cookie 在网站中 xff0c http请求是无状态的 也就是说即使第一次和服务器连接后并且登录成功后 xff0c 第二次请求服务器依然不能知道当前请求是哪个用户 cookie的出现就是为了解决这个

随机推荐

  • python爬虫之request库

    发送get请求 1 最简单的发送get请求就是通过requests get来调用 response 61 requests get 34 URL 34 构造一个向服务器请求资源的Request对象 xff0c 返回一个包含服务器资源的Res
  • 爬虫之数据的提取 使用XPath 及lxml 初学者必备

    一 XPATH是什么 xff1f 干什么用的 xff1f xpath xff08 XML Path Language xff09 是一门在XML和HTML文档中查找信息的语言 xff0c 可用来在XML和HTML文档中对元素和属性进行遍历
  • 刷题之sum-closest

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target 找出 nums 中的三个整数 xff0c 使得它们的和与 target 最接近 返回这三个数的和 假定每组输入只存在唯一答案 示例 xff1a 输入 xff1a num
  • 使用requests和xpath爬取电影天堂

    import requests from lxml import etree from openpyxl import Workbook URL 61 39 https dytt8 net html gndy dyzz list 23 1
  • day4数组之 删除排序数组中的重复项

    26删除排序数组中的重复项 给定一个排序数组 xff0c 你需要在 原地 删除重复出现的元素 xff0c 使得每个元素只出现一次 xff0c 返回移除后数组的新长度 不要使用额外的数组空间 xff0c 你必须在 原地 修改输入数组 并在使用
  • 爬虫之BeautifulSoup4库详解

    BeautifulSoup4库 和 lxml 一样 xff0c Beautiful Soup 也是一个HTML XML的解析器 xff0c 主要的功能也是如何解析和提取 HTML XML 数据 lxml 只会局部遍历 xff0c 而Beau
  • 在 VirtualBox 中安装 Debian 虚拟机

    在 VirtualBox 中安装 Debian 虚拟机 手把手一步一步带你在VirtualBox中安装Debian虚拟机 xff1b 打开VirtualBox软件点击新建 xff1a 配置信息 xff08 示例 xff09 xff1a 名称
  • 爬虫中国天气网数据并可视化

    中国天气网爬虫数据可视化 爬虫功能网页分析 以华北地区为例分析网页源代码 1 以谷歌浏览器为例分析2 提取特征标签3 分析源代码利用requests库获取目标网页源代码利用BeautifulSoup库提取天气信息港澳台地区代码分析分析数据数
  • day5刷题之 删除排序数组中的重复项 II

    80 删除排序数组中的重复项 II 难度中等361 给定一个增序排列数组 nums xff0c 你需要在 原地 删除重复出现的元素 xff0c 使得每个元素最多出现两次 xff0c 返回移除后数组的新长度 不要使用额外的数组空间 xff0c
  • day7刷题之二分搜索2

    33 搜索旋转排序数组 难度中等1187收藏分享切换为英文接收动态反馈 升序排列的整数数组 nums 在预先未知的某个点上进行了旋转 xff08 例如 xff0c 0 1 2 4 5 6 7 经旋转后可能变为 4 5 6 7 0 1 2 x
  • day6刷题之二分搜索1

    二分查找代码 class Solution public int searchInsert int nums int target int left 61 0 right 61 nums length 1 注意循环条件 while left
  • 正则表达式补充篇

    1 re match和re search match 和search 的区别 xff1a match xff08 xff09 函数只检测RE是不是在string的开始位置匹配 xff0c search 会扫描整个string查找匹配matc
  • 爬虫实战之爬取古诗文网站 (详细)

    爬取古诗文网站 重点是练习正则表达式的使用 链接变化 url base 61 39 https www gushiwen cn default aspx 39 for i in range 1 2 print 39 正在爬取第 页 xff1
  • 利用Python爬取糗事百科段子信息

    有个博客很详细https blog csdn net weixin 42488570 article details 80794087 要求 xff1a 用户ID xff0c 用户等级 xff0c 用户性别 xff0c 发表段子文字信息 x
  • 爬虫之数据存储(json,csv,mysql)等

    JSON支持数据格式 xff1a 对象 xff08 字典 xff09 使用花括号 数组 xff08 列表 xff09 使用方括号 整形 浮点型 布尔类型还有null类型 字符串类型 xff08 字符串必须要用双引号 xff0c 不能用单引号
  • MongoDB的安装及配置服务及使用

    安装配置 https blog csdn net heshushun article details 77776706 1 先在安装目录data文件下创建一个新文件夹log xff08 用来存放日志文件 xff09 2 在Mongodb安装
  • python多线程学习

    Python3 线程中常用的两个模块为 xff1a thread xff08 已经废弃 xff09 threading 推荐使用 线程模块 Python3 通过两个标准库 thread 和 threading 提供对线程的支持 thread
  • 爬虫实战之多线程下载表情包

    一般下载 import requests from lxml import etree import os import re from urllib request import urlretrieve headers 61 39 Use
  • 卷积padding,kernel_initializer

    TensorFlow和 keras layers convolutional Conv1D和tf layers Conv1D函数 keras layers convolutional Conv1D filters kernel size s
  • python刷题之链表常见操作

    链表常用操作 也可以把列表当做队列用 xff0c 只是在队列里第一加入的元素 xff0c 第一个取出来 xff1b 但是拿列表用作这样的目的效率不高 在列表的最后添加或者弹出元素速度快 xff0c 然而在列表里插入或者从头部弹出速度却不快