题解 | #旋转链表#

旋转链表

https://www.nowcoder.com/practice/1ad00d19a5fa4b8dae65610af8bdb0ed

struct ListNode* rotateLinkedList(struct ListNode* head, int k ) 
{
    if ( head == NULL ) return NULL;


    struct ListNode* temp  = head;

    struct ListNode* tail  = NULL;
    struct ListNode* newtail  = NULL;
    struct ListNode* newhead  = NULL;



    //记录断开节点的前后两个节点,以及原本链表的最后一个节点,最后重新排序即可

    int len = 0;

    while ( temp ) {                        //寻找链表结尾以及计算链表长度
        ++len;
        if ( !temp->next )  tail = temp;
        temp = temp->next;
    }

    if ( k == len ) return head;            //k 和 链表长度一样不用操作

    temp = head;

    k = k % len;                            //k 大于 链表长度需要取余

    for ( int i = 0; i < len - k - 1; ++i ) {        //寻找需要断开的节点前后的两个点
        temp = temp->next;
    }

    newtail = temp;
    newhead = temp->next;
    newtail->next = NULL;

    tail->next = head;

    return newhead;


}                    

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
06-12 16:00
天津大学 Java
牛客30236098...:腾讯坏事做尽,终面挂是最破防的 上次被挂了后我连简历都不刷了
点赞 评论 收藏
分享
求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务