乐扣T61 OJ2:旋转链表 c++

问题描述 :
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。

示例 1:

输入: 1->2->3->4->5->NULL, k = 2

输出: 4->5->1->2->3->NULL

解释:

向右旋转 1 步: 5->1->2->3->4->NULL

向右旋转 2 步: 4->5->1->2->3->NULL

示例 2:

输入: 0->1->2->NULL, k = 4

输出: 2->0->1->NULL

解释:

向右旋转 1 步: 2->0->1->NULL

向右旋转 2 步: 1->2->0->NULL

向右旋转 3 步: 0->1->2->NULL

向右旋转 4 步: 2->0->1->NULL

输入说明 :

首先输入链表长度len,然后输入len个整数,以空格分隔。

再输入非负整数k。

输出说明 :

输出格式见范例
输入范例:
5
1 2 3 4 5
2

输出范例:
head–>4–>5–>1–>2–>3–>tail

#include
using namespace std;
struct ListNode{
     
    int val;
    struct ListNode *next;
    ListNode() : val(0), next(NULL) {
     }
    ListNode(int x) : val(x), next(NULL) {
     }
    ListNode(int x, ListNode *next) : val(x), next(next) {
     }
};
class Solution
{
     
public:
    ListNode* rotateRight(ListNode* head, int k) {
     
    //完成该函数的填写
        if (!head) return head;
        int len=1,num;
        ListNode *p=head,*p_pre,*q;
        while(p->next){
     
            p=p->next;len++;
        }
        k=k%len;
        if(k==0) return head;

            num=len-k;
            p=head;
            while(num>1){
     
                p=p->next;
                num--;
            }
            p_pre=p;
            p=p->next;
            q=p;
            p_pre->next=NULL;
            while(p->next)
                p=p->next;
            p->next=head;
            head=q;
			return head;   //不加这一句,LeetCode显示上编译错误(要求有返回值)
    }
};
ListNode *createByTail()
{
     
    ListNode *head;
    ListNode *p1,*p2;
    int n=0,num;
    int len;
    cin>>len;
    head=NULL;
    while(n<len && cin>>num)
    {
     
        p1=new ListNode(num);
        n=n+1;
        if(n==1)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
    }
    return head;
}
void  displayLink(ListNode *head)
{
     
    ListNode *p;
    p=head;
    cout<<"head-->";
    while(p!= NULL)
    {
     
        cout<<p->val<<"-->";
        p=p->next;
    }
    cout<<"tail\n";
}
int main()
{
     
    int k;
    ListNode* head = createByTail();
    cin>>k;
    head=Solution().rotateRight(head,k);
    displayLink(head);
    return 0;
}

你可能感兴趣的:(LeetCode)