题解 | #旋转链表#

旋转链表

http://www.nowcoder.com/practice/1ad00d19a5fa4b8dae65610af8bdb0ed

找倒数第K个节点的变形,需要注意的是k大于链表的长度,需要得到链表的长度L后:K=K%L;

package main
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 head
    }
    
    h := head
    num := 0
    for h != nil {
        h = h.Next
        num++
    }
    k = k%num
        
    kNode,last := findEKListNode(head,k+1)
    last.Next = head
    res := kNode.Next
    kNode.Next = nil
    return res
}

func findEKListNode( head *ListNode ,  k int) (*ListNode,*ListNode){
    fast,slow,last := head,head,head
    
    i := 1
    for fast != nil {
        last = fast
        fast = fast.Next
        if i > k {
            slow = slow.Next
        }
        i++
    }
    return slow,last
}
全部评论

相关推荐

2025-12-13 14:51
已编辑
井冈山大学 算法工程师
龙虾x:算法比你强的没有你美,比你美的…..算了已经没有比你美的了
工作两年想退休了
点赞 评论 收藏
分享
码农索隆:以下是我以我微薄的认知提供的建议: 1.考个教师资格证,去当体育考试。 2.去健身房当健身教练(因为在我印象里面体育生身材都不错)。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务