算法与数据结构算法与数据结构数据结构和算法分析

leetcode.61

2018-12-31  本文已影响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;
}

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

上一篇下一篇

猜你喜欢

热点阅读