代码随想录70期day3

203. Remove Linked List Elements

需要虚拟节点

python 复制代码
# 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: Optional[ListNode], val: int) -> Optional[ListNode]:
        
        dummy_head = ListNode(next = head)

        # iterate the whole list to remove the node whoose value equals to the number of val
        current = dummy_head
        while current.next:
            if current.next.val == val:
                current.next = current.next.next
            else:
                current = current.next 
        return dummy_head.next

707

Single linklists

python 复制代码
# Single Linklist
class ListNode:
    def __init__(self,val = 0,next=None):
        self.val = val
        self.next = next

class MyLinkedList:
    def __init__(self):
        self.dummy_head = ListNode()
        self.size = 0
    def get(self,index:int) -> int:
        if index < 0 or index >= self.size:
            return -1
        
        current = self.dummy_head.next 
        for i in range(index):
            current = current.index 
        return current.index
    
    def addAtHead(self,val:int) ->None:
        self.dummy_head.next = ListNode(val,self.dummy_head.next)
        self.size += 1
    
    def addAtTail(self,val:int)->None:
        current = self.dummy_head
        while current.next:
            current = current.next 
        
        current.next = ListNode(val)
        self.size += 1
    
    def addAtIndex(self,index:int,val:int) -> None:
        
        if index < 0 or index >self.size:
            return 
        
        current = self.dummy_head
        for i in range(index):
            current = current.next 

        current.next = ListNode(val,current.next)
        self.size += 1
    
    def deleteAtIndex(self,index:int) ->None:
        if index < 0 or index >= self.size:
            return 
        current = self.dummy_head
        for i in range(index):
            current = current.next 

        current.next = current.next.next
        self.size -=1
        

Double Linklist

python 复制代码
class ListNode:
    def __init__(self,val =0,prev = None,next = None):
        self.val = val 
        self.prev = prev 
        self.next = next 

class MyLinkedList:
    def __init__(self):
        self.head = None 
        self.tail = None 
        self.size = 0

    def get(self,index:int)->int:
        if index < 0 or index >= self.size:
            return -1
        if index < self.size//2:
            current = self.head
            for i in range(index):
                current = current.next
        else:
            current = self.tail 
            for i range(self.size - index - 1):
                current = current.prev 
        
        return current.val 
    
    def addAtHead(self,val:int)->None:
        new_node =ListNode(val,None,self.head)
        if self.head:
            self.head.prev = new_node 
        else:
            self.tail = new_node 
        self.head = new_node 
        self.size +=1
    
    def addAtTail(self,val:int)->None:
        new_node = ListNode(val,self.tail,None)
        if self.tail:
            self.tail.next = new_node 
        else:
            self.head = new_node
        self.tail = new_node 
        self.size += 1
    
    def addAtIndex(self,index:int,val:int)->None:
        if index < 0 or index > self.size:
            return 
        
        if index == 0:
            self.addAtHead(val)
        elif index == self.size:
            self.addAtTail(val)
        else:
            if index <self.size //2:
                current = self.head 
                for i in range(index - 1):
                    current = current.next 
                else:
                    current = self.tail 
                    for i in range(self.size-index):
                        current = current.prev 
                new_node = ListNode(val,current,current.next)
                current.next.prev = new_node 
                current.next = new_node 
                self.size +=1 
        
    def deleteAtIndex(self,index:int)->None:
        if index < 0 or index >=self.size:
            return 
        
        if index == 0:
            self.head == self.head.next 
            if self.head:
                self.head.prev = None 
            else:
                self.tail = None 
        elif index == self.size -1:
            self.tail = self.tail.prev 
            if self.tail:
                self.tail.next = None 
            else:
                self.head = None 
        else:
            if index < self.size//2:
                current = self.head 
                for i in range(index):
                    current = current.next 
            else:
                current = self.tail 
                for i in range(self.size-index-1):
                    current = current.prev 
            current.prev.next = current.next 
            current.next.prev = current.prev 
        self.size -=1 

206

python 复制代码
# Two pointer version
class Solution:
    def reverseList(self,head:ListNode)->ListNode:
        cur = head 
        pre = None 
        while cur:
            temp  = cur.next 
            cur.next = pre 

            pre = cur 
            cur = temp 
        return pre

# Recursive version

class Solution:

    def reverseList(self,head:ListNode)->ListNode:
        return self.reverse(head,None)
    
    def reverse(self,cur:ListNode,pre:ListNode)->ListNode:
        if cur == None:
            return pre 
        temp = cur.next
        cur.next = pre
        return self.reverse(temp,cur)
相关推荐
冷雨夜中漫步7 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴8 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再8 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
m0_736919109 小时前
C++代码风格检查工具
开发语言·c++·算法
喵手9 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934739 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy10 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
黎雁·泠崖10 小时前
【魔法森林冒险】5/14 Allen类(三):任务进度与状态管理
java·开发语言
2301_7634724611 小时前
C++20概念(Concepts)入门指南
开发语言·c++·算法
肖永威11 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos