题解 | #旋转链表#

旋转链表

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
}
全部评论

相关推荐

09-09 13:30
四川大学 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-29 14:02
纠结的茶叶蛋在开会:太简单了,技术和业务没一个够用的,要么学业务,去搞erp或者his,要么专精技术,去搞架构
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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