美文网首页
029-Rotate List

029-Rotate List

作者: Woodlouse | 来源:发表于2020-06-05 23:35 被阅读0次

描述

在一个单链表中,在第k个位置向右旋转单链表,k是一个非负值。

输入:

​ 1->2->3->4->5->nullptr, k=2

输出

​ 4->5->1->2->3->nullptr

分析

遍历链表,计算出链表的长度,将链表的尾结点连接到头节点形成一个环链表,再往后遍历len-k个节点,从此将链表断开即可。需要兼容k超出链表长度时的情况。

实现

ListNode *rotateList(ListNode *head, int k)
{
    int len = 1;
    
    // 计算长度
    ListNode *cur = head;
    while (cur->next) {
        ++len;
        cur = cur->next;
    }
    
    // 兼容k
    k = len - k%len;
    
    //形成环链表
    cur->next = head;
    
    // 再向前走k个节点
    for(int i=0; i<k; i++) {
        cur = cur->next;
    }
    head = cur->next;
    cur->next = nullptr;
    
    return head;
}

时间复杂度O(n),空间复杂度为O(1)

相关文章

网友评论

      本文标题:029-Rotate List

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