美文网首页
61. 旋转链表

61. 旋转链表

作者: fengup | 来源:发表于2019-08-18 12:01 被阅读0次

    思路

    • 找到旧的尾部并将其与链表头相连 old_tail.next = head,整个链表闭合成环,同时计算出链表的长度 len。
    • 找到新的尾部,第 (len - k % len - 1) 个节点 ,新的链表头是第 (len - k % len) 个节点。
    • 断开环 new_tail.next = NULL,并返回新的链表头 new_head。
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    
    
    struct ListNode* rotateRight(struct ListNode* head, int k){
        if(k == 0 || !head || !(head -> next))  
            return head;
    
        struct ListNode *cur = head;
        struct ListNode *tmp = head;
        
        int len = 1;
        //成环
        while(tmp->next){
            tmp = tmp->next;
            len++;
        }
        tmp->next = head;
        
        k = k % len;
        k = len - k;
        //断链
        while(k > 0){
            cur = cur->next;
            tmp = tmp->next; 
            k--;
        }
        tmp->next = NULL;
    
        return cur;
    
    }
    
    
    

    相关文章

      网友评论

          本文标题:61. 旋转链表

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