首页 > 其他分享 >Day3

Day3

时间:2024-05-26 21:10:59浏览次数:10  
标签:index head cur self Day3 Next current

今天是day3,今天的内容如下:
第一题为移除链表元素,简而言之为,给定一个链表,要求删除所有值为val的节点并最终把头结点输出。

func  removeelements(head *ListNode,val int) *ListNode {
    for head!=nil && head.Val==val{
        head = head.next
    }
    cur:=head
    for cur!=nil && cur.Next!=nil{
        if cur.Next.Val == val{
        cur.Next = cur.Next.Next
    }else{
        cur = cur.Next
    }
    }
    return head
}

法二虚拟头结点法:

func removeElements(head *ListNode,val int) *ListNode{
    dummy:=&ListNode{}
    dummy.Next = head
    cur:=dummy
    for cur!=nil && cur.Next!=nil{
        if cur.Next.Val == val{
            cur.Next =cur.Next.Next
        }else{
            cur = cur.Next
        }
    }
    return dummy.Next
}

python虚拟头结点法:

class solution:
    def removeElements(self,head:Option[ListNode],val:int) ->Option[ListNode]:
        dummy_head = ListNode(next = head)
        current = dummy_head
        while current.next:
            if current.next.val == val:
                current.next = current.next.next
            else:
                current = current.next
        return dummy_head.next

第二题为构造链表以及定义相关方法:
用go语言实现:

type MyLinkedList struct{
    dummy *Node
}
type Node struct{
    Val int
    Next *Node
    Pre *Node
}

func Constructor() MyLinkedList {
    rear := &Node{
        Val:-1,
        Next:nil,
        Pre:nil,
    }
    rear.Next = rear
    rear.Pre = rear
    return MyLinkedList{rear}
}

func (this *MyLinkedList) Get(index int){
    head = this.dummy.Next
    for head!= this.dummy && index > 0{
        index--
        head = head.Next
    }
    if 0!= index {
        return -1
    }
    return head.Val
}

func (this *MyLinkedList) AddAtHead(val int) {
    dummy:=this.dummy
    node:=&Node{
        Val:val,
        Next:dummy.Next,
        Pre:dummy,
    }
    dummy.Next.Pre = node
    dummy.Next = node
}

func (this *MyLinkedList) AddAtTail(val int) {
    dummy:=this.dummy
    rear:=&Node{
        Val:val,
        Next:dummy,
        Pre:dummy.Pre,
    }
    dummy.Pre.Next = rear
    dummy.Pre = rear
}

func (this *MyLinkedList) AddAtIndex(index int,val int) {
    head:=this.dummy.Next
    for head != this.dummy && index > 0 {
        head = head.Next
        index--
    }
    if index > 0{
        return 
    }
    node:=&Node{
        Val:val,
        Next:head,
        Pre:head.Pre,
    }
    head.Pre.Next = node
    head.Pre = ndoe
}
func (this *MyLinkedList) DeleteAtIndex(index int){
    if this.dummy.Next == this.dummy {
        return
    }
    head := this.dummy.Next
    for head.Next != this.dummy&&index >0 {
        head = head.Next
        index--
    }
    if index == 0{
        head.Next.Pre = head.Pre
        head.Pre.Next = head.Next
    }
}

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 >= index.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 in 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_ndoe
        self.size+=1
    
    def addAtTail(self,val:int) -> None:
        new_ndoe=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 = Noe
            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

题目三:反转链表,即在一个给定链表中,将其顺序反转

func reverseList(head *ListNode) *ListNode{
    var pre *ListNode
    cur:=head
    for cur!=nil{
        next:=cur.Next
        cur.Next = pre
        pre = cur
        cur = next
    }
    return pre
}

python版本:

class Solution:
    def reverseList(self,head:Optional[ListNode]) ->Optional[ListNode]:
        cur = head
        pre = None
        while cur:
            temp = cur.next
            cur.next = pre
            pre = cur
            cur = temp
        return pre

python递归法:

class Solution:
    def reverseList(self,head:Optional[ListNode]) ->Optipnal[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)

标签:index,head,cur,self,Day3,Next,current
From: https://www.cnblogs.com/leisure535/p/18214296

相关文章

  • Day36 代码随想录打卡|二叉树篇---翻转二叉树
    题目(leecodeT226):给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。方法:迭代法翻转二叉树,即从根节点开始,一一交换每个节点的左右孩子节点,然后递归此过程,将根节点的左右孩子节点再分别作为参数传入交换节点的函数中。重复此过程,直到结束。就完成了二叉树的翻......
  • 前端面试题日常练-day33 【面试题】
    题目希望这些选择题能够帮助您进行前端面试的准备,答案在文末。在jQuery中,以下哪个选项用于在元素上绑定一个点击事件?a)click()b)bind()c)on()d)trigger()jQuery中,以下哪个选项用于获取元素的属性值?a)text()b)html()c)val()d)attr()在jQuery中,以下哪......
  • 代码随想录算法训练营第36期DAY38
    DAY38435无重叠区间昨晚很快就想出来了,今天相当于二刷。class Solution {public:    static bool mycmp(vector<int>&a,vector<int>&b){        return a[1]<b[1];    }    int eraseOverlapIntervals(vector<vector<int>>& intervals) {   ......
  • 代码随想录算法训练营第36期DAY39
    道心破碎的一天,继续加油吧,坚持努力。DAY39738单调递增的数字暴力法:没有想到用inti=n;i>0;i--来遍历。class Solution {private:    bool checknum(int num){        if(num<10) return true;        while(num/10!=0){           ......
  • 代码随想录算法训练营第36期DAY37
    DAY37先二刷昨天的3道题目,每种方法都写:是否已完成:是。报告:134加油站的朴素法没写对。原因是:在if中缺少了store>=0的判断,只给出了index==i的判断。前进法没写出来。因为忘记了总油量的判断。Sum。注意变量的初始化。分配糖果注意if里面放的是ratings;860柠檬水找零网上摘得思......
  • Day3 | 203.移除链表元素 、707.设计链表 、 206.反转链表
    203.移除链表元素建议:本题最关键是要理解虚拟头结点的使用技巧,这个对链表题目很重要。题目链接/文章讲解/视频讲解::https://programmercarl.com/0203.移除链表元素.html思考设置一个虚拟的dummy节点,方便代码逻辑一致,不然要专门处理头节点。定义一个pre节点,作为cur节点的前驱......
  • 运维必备Linux学习day3(面试常问的linux指令)
    一.问题:列举Linux高级命令,至少6个(百度)netstat//网络状态监控 top//系统运行状态 lsblk //查看硬盘分区findps-aux//查看运行进程chkconfig//查看服务启动状态systemctl//管理系统服务器二.问题:Linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?(......
  • 敏捷冲刺day3--数字工匠队
    这个作业属于哪个课程软件工程这个作业的要求是什么项目冲刺这个作业的目标冲刺日志3站立式会议照片工作困难处理任务时遇到一些问题需要上网学习花费时间昨日完成工作部分登录界面前后端处理代码今日计划工作继续完成登录界面前后端处理项目燃尽图每......
  • m1_day3
    课程内容:Java中的数据类型Java中的运算符Java中的数据类型什么是数据类型数据类型可以理解成数据的单位Java是一个强类型的编程语言所有的变量在第一次出现的时候必须有数据类型第二次出现不需要数据类型​钱:元角 分百美元日元个数:个只条栋....长......
  • day3
    课程内容:什么是异常?为什么要处理异常?如何处理异常?什么是异常?Java当中所有“问题”的体系结构    Throwable[可以向外抛出的]​ErrorException [错误] [异常]​RuntimeException......