C++程序 链表的顺时针旋转
给定一个单链表和一个整数 K ,任务是将链表顺时针向右旋转 K 个位置。
例子:
输入: 1 -> 2 -> 3 -> 4 -> 5 -> NULL, K = 2
输出: 4 -> 5 -> 1 -> 2 -> 3 -> NULL
输入: 7 -> 9 -> 11 -> 13 -> 3 -> 5 -> NULL, K = 12
输出: 7 -> 9 -> 11 -> 13 -> 3 -> 5 -> NULL
做法: 为了顺时针旋转链表,请先检查给定的k是否大于链表中节点的数量。遍历列表并找到链表的长度,然后将其与k进行比较,如果小于则继续,否则通过将其与列表的长度取模来在链表大小范围内减少它。
然后从链表的长度中减去k的值。现在,问题已经转化为链表的左旋,因此请按照以下过程进行操作:
- 将第k个节点的下一个节点更改为NULL。
- 将最后一个节点的下一个节点更改为先前的头节点。
- 将头更改为第(k+1)个节点。
为了实现这一点,需要指向第k个节点、第(k+1)个节点和最后一个节点的指针。
下面是上述做法的实现:
输出:
时间复杂度: : O(N),因为我们使用循环遍历N次。其中N是链表中的节点数。
辅助空间: : O(1),因为我们没有使用任何额外的空间。