题目描述
题目链接: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;
}
}