Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.

题意描述很模糊,经过多次失败的尝试,总算明白大概是啥意思了……

/**
 * 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(head == NULL)return NULL;
        k = k%listlength(head);
        if(k == 0||k>=listlength(head))return head;
        ListNode *s1 = head,*s2 = head,*temp = head;
        for(int i = 0 ; i < k-1;i++)
        {
            if(s1->next == NULL)return head;
            s1 = s1 -> next;
        }
        while(s1 -> next != NULL)
        {
            s1 = s1 -> next; 
            temp = s2;
            s2 = s2 -> next;
        }
        s1->next =head;
        head = s2;
        temp->next = NULL;
        return head;
    }
    int listlength(ListNode *head)
    {
        int i = 0;
        ListNode *temp = head;
        while(temp !=NULL)
        {
            i++;
            temp = temp ->next;            
        }
        return i;
    }
};

  

posted on 2014-03-12 09:53  pengyu2003  阅读(103)  评论(0)    收藏  举报

导航