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

  

posted @ 2014-10-08 21:15  zombies  阅读(172)  评论(0编辑  收藏  举报