算法系列——旋转链表(Rotate List)

165 阅读1分钟

题目描述

题目链接:leetcode-cn.com/problems/ro…
Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

解题思路

题目要求将链表的倒数前k个结点翻转至链表头。特别注意,k可能是大于链表长度的一个值,因此我们要进行k%len (len表示链表长度)操作。

首先应该求出链表长度len,然后从头移动指针,移动到正数 第 len-k个结点,那个len-k+1 就是倒数第k个结点,然后进行对应的指针操作即可。

程序实现

 public class Solution {
    public ListNode rotateRight(ListNode head, int k) {
       if(head==null||head.next==null||k<=0)
           return head;
        ListNode p=head;
        int len=1;
        //取得链表长度
        while(p.next!=null){
            p=p.next;
            len++;
        }
        p.next=head;
        k=k%len;
        for(int i=0;i<len-k;i++)
            p=p.next;
        //p指向第len-k个结点
        head=p.next;
        p.next=null;
        return head;
        
       
        
    }
}