Leetcode-61:旋转链表

    xiaoxiao2022-07-14  152

    个人思路总结:

    这道题的难点就是如何找到那个旋转点。步骤如下: 1、遍历链表,保存长度(count) 2、找到分割点(k%count),然后将尾部向前数第K个元素作为头,原来的头接到原来的尾上

    代码如下:

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* rotateRight(ListNode* head, int k) { if(head==nullptr||k==0) return head; int count = 1; ListNode* tmp = head; ListNode* newend = head; ListNode* newhead = head; while(tmp->next!=nullptr) { count++; //链表长度 tmp = tmp->next; //退出循环后,tmp即为链表最后一个元素(并非nullptr) } k = k % count; //k为从后往前数的第几个元素作为链表新表头 while(count-k-1) { newend = newend->next; //newend为前部分的最后一个元素 k++; } tmp->next = newhead; newhead = newend->next; newend->next = nullptr; return newhead; } };
    最新回复(0)