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; } };