leetcode.61

作者: 小气的王二狗 | 来源:发表于2018-12-31 23:53 被阅读1次
    旋转链表

    这道题在leetcode上难度是中等还是比较意外的,做下来难度并不是很大。

    思路

    找到链表的末结点以及末结点的前驱,根据k的长度调整链表

    特殊情况--->解决方法

    1.链表为空时--->判断
    2.末结点不存在前驱时--->判断
    3.k的数字过于大时--->取余

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    /*当k的长度是链表长度的整数倍时,链表恢复原状*/
    int getlen(struct ListNode* head)
    {
        int c=0;
        while(head!=NULL)
        {
            ++c;
            head=head->next;
        }
        return c;
    }
    struct ListNode* rotateRight(struct ListNode* head, int k) {
        struct ListNode* p,*q,*r;
        p=head;
        int c=getlen(head);
        if(p==NULL)return NULL;
        if(p->next==NULL)return head;
        k=k%c;
        if(k==0)return head;
        for(int i=0;i<k;++i)
        {
            p=head;
            while(p->next->next!=NULL)
            {
                p=p->next;
            }
            r=p->next;
            q=p;
            q->next=NULL;
            r->next=head;
            head=r;
        }
        return head;
    }
    

    有朋友有更好的思路以及方法,欢迎留言讨论。

    相关文章

      网友评论

        本文标题:leetcode.61

        本文链接:https://www.haomeiwen.com/subject/jusglqtx.html