LeetCode 61. 旋转链表

Posted Blocking The Sky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 61. 旋转链表相关的知识,希望对你有一定的参考价值。

题目描述

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例:
在这里插入图片描述

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

代码

思路

先把k对链表长度取余,再遍历找到第n-k个结点,它的下一个结点就是最终链表的第一个结点,最后只需将最后一个结点的next指向最初链表的第一个结点即可,之后要将第n-k个结点的next置为NULL。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* rotateRight(ListNode* head, int k) {
        int lenth=0;
        if(head==NULL)
            return head;
        ListNode *first=new ListNode(0,NULL);
        ListNode *last=new ListNode(0);
        first=head;
        while(head){
            lenth++;
            if(head->next==NULL){
                last=head;
            }
            head=head->next;
        }
        k=k%lenth;
        head=first;
        while(head){
            lenth--;
            //cout<<lenth<<" "<<k<<endl;
            if(lenth==k){
                break;
            }
            head=head->next;
        }
        last->next=first;
        first=head->next;
        head->next=NULL;
       // last->next=head;
        return first;
    }
};

以上是关于LeetCode 61. 旋转链表的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 61. 旋转链表

LeetCode:旋转链表61

「LeetCode」61. 旋转链表

「LeetCode」61. 旋转链表

LeetCode:61.旋转链表(python3)

Leetcode链表旋转链表(61)