题目
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
思路
思路是先得到链表长度。再从头始找到新的head,再变换连接
代码
public ListNode RotateRight(ListNode head, int k)
{
public ListNode RotateRight(ListNode head, int k)
{ if (k == 0 || head == null) return head;
int len = 0; ListNode first = head;//头结点
ListNode last = null;//尾节点
while (head != null)
{ len++;//求长度 last = head;//最后一个节点
head = head.next;//循环条件 }
k = k % len;//假设k>len,取余数
int n = 0;
head = first;//标记到头结点
while (head != null)
{
if (++n == (len - k))//推断是否到达位置
break;
head = head.next;
}
//下面为交换位置
last.next = first;
first = head.next;
head.next = null;
return first;
}
}