1、题目链接
https://leetcode.com/problems/rotate-list/
2、解题思路
这道题的意思是说给你一个链表head,然后再给你一个非负整数k,要求让你将这个链表的倒数k个元素旋转放到表头位置,就好比hea=1->2->3->4->5->NULL,k=2,旋转之后head=4->5->1->2->3->NULL;我刚开始的想法是先将链表截断,然后再拼接起来,发现这样比较费事,然后我想着是不是可以把这个链表弄成一个环形的,直接把表尾链接到表头部,然后在计算截断的位置就好了,截断的话直接将listNode.next置空即可。
3、代码
- Java
public ListNode rotateRight(ListNode head, int k) {
if (null == head || null == head.next || k == 0) {
return head;
}
int length = 0;
ListNode listNode = head;
while (null != listNode) {
length++;
listNode = listNode.next;
}
listNode = head;
while (null != listNode.next) {
listNode = listNode.next;
}
listNode.next = head;
int cnt = length - k % length; //注意可能会比链表长度大
ListNode listNode1 = listNode;
while (cnt > 0) {
listNode1 = listNode1.next;
cnt--;
}
ListNode listNode2 = listNode1.next;
listNode1.next = null;
return listNode2;
}