首页 > 其他分享 >Day4

Day4

时间:2024-05-26 22:00:51浏览次数:9  
标签:head slow ListNode Day4 fast Next next

今天是day4
第一题:两两交换链表中的节点:

func swapPairs(head *ListNode) *ListNode {
    dummy:=&ListNode{
        Next:head
    }
    pre:=dummy
    for head!=nil && head.Next!=nil{
        pre.Next = head.Next
        next:=head.Next.Next
        head.Next.Next = head
        head.Next = next
        pre = head
        head = next
    }
    return dummy.Next
}

go递归法:

func swapPairs(head *ListNode) *ListNode{
    if head == nil || head.Next!=nil{
        return head
    }
    next:=head.Next
    head.Next = sawpPairs(next.Next)
    next.Next = head
    return next
}

python版本:

class Solution:
    def swapPairs(self,head: Optional[ListNode]) -> Optional[ListNode]:
        dummy_head = ListNode(next =head)
        current = dummy_head

        while current.next and current.next.next:
            temp = current.next
            temp1 = current.next.next.next

            current.next = current.next.next
            current.next.next = temp
            temp.next = temp1
            curernt = current.next.next
        return dummy_head.next

python递归:

class Solution:
    def swapPairs(self,head:Optional[ListNode]) -> Optional[ListNode]:
        if head is None or head.next is None:
            return head
        
        pre = head
        cur = head.next
        next = head.next.next

        cur.next = pre
        pre.next = self.swapPairs(next)

        return cur

题二:删除链表倒数第N个元素:

func removeFromend(head *ListNode,n int) *ListNode{
    dummy_node := &ListNode{0,head}
    fast,slow:=dummy_node,dummy_node
    for i:=0;i<=n;i++{
        fast = fast.Next
    }
    for fast!=nil{
        slow = slow.Next
        fast = fast.Next
    }
    slow.Next = slow.Next.Next
    return dummy_node.Next
}

python版本:

class Solution:
    def removefrom(self,head:Optional[ListNode],n int) -> Optional[ListNode]:
        dummy_node = ListNode{0,head}
        slow = fast = dummy_node

        for i in range(n+1):
            fast = fast.next
        
        while fast:
            slow = slow.next
            fast = fast.next
        slow.next = slow.next.next
        return dummy_node.next

题目三:判断链表相交的点并输出位置

func getIntersec(headA,headB *ListNode) *ListNode{
    cura := headA
    curb := headB
    lena :=0
    lenb :=0
    for cura!=nil{
        cura = cura.Next
        lena++
    }
    for curb !=nil{
        curb = curb.Next
        lenb++
    }
    var step int
    var fast,slow *ListNode
    if lena > lenb {
        step = lena - lenb
        fast,slow = headA,headB
    }else {
        step = lenb - lena
        fast,slow = headB,headA
    }

    for i:=0;i<step;i++{
        fast = fast.next
    }
    for fast!=slow{
        fast = fast.Next
        slow = slow.Next
    }
    return fast
}

go双指针法:


func getintersec(haedA,headB *ListNode) *ListNode {
    l1,l2:=headA,headB
    for l1!=l2{
        if l1 != nil{
            l1 = l1.Next
        }else{
            l1 = headB
        }

        if l2!=nil{
            l2 = l2.Next
        }else{
            l2 = headA
        }
    }
    return l1
}

python实现:

class Solution:
    def getIntersec(self,headA:ListNode,headB:ListNode) -> Optional[ListNode]:
        lena,lenb = 0,0
        cur = headA
        while cur:
            cur = cur.next
            lena+=1
        cur = headB
        while cur:
            cur = cur.next
            leb+=1
        cura,curb = headA,headB
        if lena > lenb:
            cura,curb = curb,cura
            lena,lenb = lenb,lena
        for _ in range(lenb - lena):
            curb = curb.next
        while cura:
            if cura == curb:
                return cura
            else:
                cura = cura.next
                curb = curb.next
        return None

法二:

class Solution:
    def getinserct(self,headA:ListNode,headB:ListNode) ->Optional[ListNode]:
        if not headA or not headB:
            return None
        
        pointera = headA
        pointerb = headB

        while pointera!=pointerb:
            pointera = pointera.next if pointera else headB
            pointerb = pointerb.next if pointerb else headA
        return pointera

题目四:环形链表,判断链表内是否有环并输出入环的第一个节点:

func detecCycle(head *ListNode) *ListNode{
    slow,fast:=head,head
    for fast!=nil && fast.Next !=nil{
        slow = slow.Next
        fast = fast.Next.Next
        if slow == fast{
            for slow !=head{
                slow = slow.Next
                head = head.Next
            }
            return head
        }
    }
    return nil
}

python版本:

class Solution:
    def detectcycle(self,head:Optional[ListNode]) -> Optional[ListNode]:
        slow = head
        fast = head
        while fast and fast.next:
            slow= slow.next
            fast = fast.next.next

            if slow == fast:
                slow = head
                while slow!=fast:
                    slow = slow.next
                    fast = fast.next
                return slow
        return None

标签:head,slow,ListNode,Day4,fast,Next,next
From: https://www.cnblogs.com/leisure535/p/18214368

相关文章

  • JS核心语法【流程控制语句、函数】;DOM【查找元素、操作元素、事件】--学习JavaEE的day
    day48JS核心技术JS核心语法继day47注意:用到控制台输出、弹窗流程控制语句Ifelse、For、For-in(遍历数组时,跟Java是否一样【java没有】)、While、Dowhile、break、continue案例:1.求1-100之间的偶数之和<!DOCTYPEhtml><html> <head> <metacharset="UTF......
  • DOM【事件、操作节点、DOM案例】--学习JavaEE的day49
    day49JS核心技术DOM继day48事件键盘事件监听器:onkeydown、onkeypress、onkeyup<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> </head> <body> <inputtype="text"......
  • day4-1-Redis
    day4-1-Redis入门Redis介绍Redis是一个基于内存的key-value结构数据库基于内存存储,读写性能高适合存储热点数据(热点商品,咨询,新闻)(在特定时间有大量访问量)keyvalueid101name小智city北京redis中文网Redis安装Redis启动-服务端......
  • 项目冲刺day4
    这个作业属于哪个课程软工4班这个作业要求在哪里作业要求1.会议1.照片2.昨日已完成:用户中心功能、订单管理功能3.今天计划完成的工作完成商品管理、图标功能,部分完成文件修改上传功能4.工作中遇到的困难出现许多未知报错,正为此查询资料...2.燃......
  • m1_day4
    课程内容:Java中的运算符Java中的变量Java中的运算符:高-》低[+-*/%]+:当+遇到String类型的时候不再表示算数加法而是表示追加连接任何一个数据类型想要变成String+""intx=45;Stringy=x+"";*:当心数值超出int类型最大边界注意使用lon......
  • day4
    课程内容:线程的概念引用多线程的原因?如何实现线程?如何控制线程?线程类其它常用方法线程的概念线程所在包:java.lang.Thread理解程序进程线程之间的区别:程序:保存在物理介质中的代码片段​进程:一旦程序运行起来就变成了操作系统当中的一个进程......
  • QBXT五一集训DAY4笔记
    \(Day\)\(4\)图论图论主要分为\(4\)个方面1.最短路2.二分图匹配3.生成树4.强连通(这个超纲了,不讲)在介绍完理论知识后,我们会逐一讨论它们图图是由点和边构成的边又分为有向边和无向边,因此图可以分为有向图和无向图无向图的度指的是一个点连了多少条边有向图的入度指的......
  • 【未整合】数学 day4.2
    博弈论Nim游戏对于\(n=2\),\(a_1=a_2\),后手可以“模仿”先手,使得后手必胜。对于\(a_1\nea_2\),先手可以让自己进入“模仿期”,使得先手必胜。结论:若\(\oplusa_i=0\),先手必败,否则必胜。很神奇的东西,证明需要群论知识。发现石子的合并满足上面四条性质,所以石子的合并就是异......
  • 【未整合】数学 day4
    微积分导数对于\(f(x)\),其在某一点的导数,就是取一个极小的\(\delta\),\(f'(x)=\lim\limits_{\delta\rightarrow0}\frac{f(x+\delta)-f(x)}{\delta}\)。、“微小变化的放大倍数”。对导数的直观理解,就是当变化量极其微小的时候,\(dx\)与\(dy\)的关系。当Δ极小时,导数相......
  • 代码随想录算法训练营三刷day44 | 动态规划之 完全背包 518. 零钱兑换 II 377. 组合总
    三刷day44完全背包基础知识问题描述举个栗子518.零钱兑换II1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组377.组合总和Ⅳ1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例来推导dp......