【LeetCode】61. Rotate List解法及分析

61. 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.

【分析】

     这个题相对简单,几乎不涉及任何算法,对链表指针熟悉的话,很容易完成,不过需要注意一些细节:1.如何求链表的长度;2. k>链表长度时如何处理;3. 指针交换逻辑顺序。

【解法及注释】

/**
 * 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) {
        
        ListNode *phead=head;
        ListNode *pTail=head;
        ListNode *temp;
        
        if(head==NULL)return head;
        
        int length=1;//初始化节点个数
        while(pTail->next!=NULL)//pTail指向原链表的尾节点
        {
           pTail=pTail->next;
           length++;
        }
        k=k%length;//k>=length的情况,视做“环”
        if(k==0)return head;
        
        for(int i=0;i<length-k-1;i++)//phead指向旋转节点
        {
            phead=phead->next;
        }
        temp=phead->next;//指向旋转位置的下一个节点,即旋转后的头结点
        phead->next=NULL;//旋转后指向空
        pTail->next=head;//原先的尾节点指针指向头结点
       
        return temp;
    }
};



你可能感兴趣的:(LeetCode,C++,rotate,List旋转链表)