首页 > 试题广场 >

旋转链表

[编程题]旋转链表
  • 热度指数:3978 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定链表的头节点,旋转链表,将链表每个节点往右移动 k 个位置,原链表后 k 个位置的节点则依次移动到链表头。

即,例如链表 : 1->2->3->4->5 k=2 则返回链表 4->5->1->2->3

数据范围:链表中节点数满足
示例1

输入

{1,2,3,4,5},2

输出

{4,5,1,2,3}
示例2

输入

{1,2,3},3

输出

{1,2,3}

说明:本题目包含复杂数据结构ListNode,点此查看相关信息
package main
import _"fmt"
import . "nc_tools"
/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param k int整型 
 * @return ListNode类
*/
func rotateLinkedList( head *ListNode ,  k int ) *ListNode {
    if head==nil{
        return nil
    }
    arr:=[]*ListNode{}
    for p:=head;p!=nil;p=p.Next{
        arr=append(arr,p)
    }
    n:=len(arr)
    k%=n
    arr=append(arr[n-k:],arr[:n-k]...)
    for i,p:=range arr{
        if i+1<n{
            p.Next=arr[i+1]
        }else{
            p.Next=nil
        }
    }
    return arr[0]
}

发表于 2023-03-07 21:09:40 回复(0)

问题信息

难度:
1条回答 1660浏览

热门推荐

通过挑战的用户

查看代码