LeetCode-Rotate List-旋转链表-旋转操作和链表
https://oj.leetcode.com/problems/rotate-list/
这道题目首先要理解什么是"rotate to the right y k",题目的那个例子看起来像是另后k个结点连接到链表的头上。
当k>n时,此题被翻译为按照从右数第k个元素进行旋转,这个就很难理解了。这种情况下我将k按照n取模,得到需要移动到左边的起始结点。然后进行旋转操作。
得到这个节点我用的方法是用一个栈去倒着数。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
int n,m;
ListNode *rotateRight(ListNode *head, int k) {
stack <ListNode *> st;
ListNode *p=head;
while(p) {
st.push(p);
p=p->next;
}
n=st.size();
if (n==0) return NULL;
k%=n;
if (k==0) return head;
ListNode *r=st.top();
ListNode *q;
p=NULL;
int count=0;
while(count<=k){
q=p;
p=st.top();
st.pop();
count++;
}
r->next=head;
p->next=NULL;
head=q;
return head;
}
};
浙公网安备 33010602011771号