zoukankan      html  css  js  c++  java
  • 2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。

    2021-03-27:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = 1→2→3→4→5, k = 2,输出:4→5→1→2→3。

    福大大 答案2020-03-27:

    1.找尾节点并且计算链表节点个数。
    2.如果k大于等链表节点个数,需要取模,k一定在[0,节点个数)范围之内。如果k=0,直接返回头节点。
    3.求倒数k+1的节点。
    4.缓存倒数第k节点ans。
    5.尾节点连头节点。
    6.倒数k+1节点的Next指针为空。
    7.返回ans。

    代码用golang编写,代码如下:

    package main
    
    import "fmt"
    
    func main() {
        head := &ListNode{Val: 1}
        head.Next = &ListNode{Val: 2}
        head.Next.Next = &ListNode{Val: 3}
        head.Next.Next.Next = &ListNode{Val: 4}
        printlnLinkNodeList(head)
        k := 6
        fmt.Println("k =", k)
        fmt.Println("----------------")
        ret := rotateRight(head, k)
        printlnLinkNodeList(ret)
    }
    
    type ListNode struct {
        Val  int
        Next *ListNode
    }
    
    func rotateRight(head *ListNode, k int) *ListNode {
        if head == nil {
            return head
        }
        //找尾节点并且计数
        cnt := 1
        tail := head
        for tail.Next != nil {
            cnt++
            tail = tail.Next
        }
    
        k = k % cnt
        if k == 0 { //刚好是头节点,就不用操作了。
            return head
        }
    
        //找倒数第k+1节点
        fast := head
        slow := head
        k++
        for k > 0 {
            fast = fast.Next
            k--
        }
        for fast != nil {
            fast = fast.Next
            slow = slow.Next
        }
    
        //缓存结果
        ans := slow.Next
        //尾节点连头节点
        tail.Next = head
        //倒数k+1节点无Next指针
        slow.Next = nil
    
        return ans
    }
    
    //链表打印
    func printlnLinkNodeList(head *ListNode) {
        cur := head
        for cur != nil {
            fmt.Print(cur.Val, "	")
            cur = cur.Next
        }
        fmt.Println()
    }
    

    执行结果如下:
    在这里插入图片描述


    力扣61. 旋转链表
    评论

  • 相关阅读:
    鼠标经过显示边框
    特殊字符
    HTML 列表
    embed 引入网上视频
    锚点定位
    盒子阴影
    Map的四种遍历方式
    Glide的 java.lang.RuntimeException: Expected instanceof GlideModule, but found:X.GlideModule@2e4554f
    Java标识符的命名规则
    django入门与实践
  • 原文地址:https://www.cnblogs.com/waitmoon/p/14587442.html
Copyright © 2011-2022 走看看