/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */ funcrotateRight(head *ListNode, k int) *ListNode { if head == nil || head.Next == nil { // 链表为空或者只有一个节点,直接返回 return head } len := length(head) // 链表长度 k = k % len// 修正k不超过其长度 if k == 0 { // 相当于不用移动,直接返回 return head } // 找到倒数第k个节点cur和它的前驱pre var pre *ListNode cur := head for i := 0; i < len-k; i++{ pre = cur cur = cur.Next } // 从倒数第k个节点处断开 pre.Next = nil // 反转两个链表 head1 := reverse(head) head2 := reverse(cur) // 连接两个链表 head.Next = head2 // 反转整个链表 return reverse(head1) }
funcreverse(head *ListNode) *ListNode { // 反转链表 var pre *ListNode cur := head for cur != nil { cur.Next, cur, pre = pre, cur.Next, cur }
return pre }
funclength(head *ListNode)int { // 返回链表长度 count := 0 cur := head for cur != nil { count++ cur = cur.Next }