61.旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
- 简单的链表操作,先遍历一遍算出长度,第一个指针停在原链表尾部
- 第二次遍历使得两个指针位于新链表的尾部和头部
- 最后旋转
/**
* Definition for singly-linked list.
* struct ListNode {
*int val;
*ListNode *next;
*ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(k == 0) return head;
if(head == NULL) return head;
ListNode *p,*q,*s;
int length=1;
p = head;
while(p->next){
length++;
p=p->next;
}
if(k % length == 0) return head;
while(k > length){
k -= length;
}
q = head;
while(length-k-1 && q->next != NULL){
q=q->next;
length--;
}
s=q->next;
p->next=head;
q->next=NULL;
return s;
}
};
【从头做leetcode之leetcode 61 旋转链表】通过时间:
文章图片
推荐阅读
- 从头做leetcode|从头做leetcode之leetcode 104 二叉树的最大深度
- 从头做leetcode之leetcode 108 将有序数组转换为二叉搜索树
- 从头做leetcode|从头做leetcode之leetcode 101 对称二叉树
- 从头做leetcode之leetcode 10 正则表达式匹配
- 从头做leetcode之leetcode 39 组合总和
- 从头做leetcode|从头做leetcode之leetcode 103 二叉树的锯齿形层次遍历
- 从头做leetcode|从头做leetcode之leetcode 102 二叉树的层序遍历
- 从头做leetcode之leetcode 35 搜索插入位置