首页 > 其他 > 详细

【LeetCode每日一题】61. 旋转链表

时间:2021-03-28 12:51:07      阅读:19      评论:0      收藏:0      [点我收藏+]

题目描述:给一个链表的头结点 head,旋转链表,将链表每个节点向右移动 k 个位置

示例1:

  输入:1->2->3->4->5->NULL, k=2

  输出:4->5->1->2->3->NULL

示例2:

  输入:1->2->3->NULL,  k=5

  输出:2->3->1->NULL

 

解题思路:由于是右移,给的又是头节点,所以得找出旋转后的新链表的尾节点 tail,

     tail->next即为新链表的头节点

解题过程:先遍历整个链表,得出链表长度len。将原链表的尾节点指向其头节点,形成闭环。然后找出新链表的尾节点,断环,形成新链表。

/**
 * 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) 
    {
        if(k==0||head==nullptr||head->next==nullptr)
          return head;
    //遍历整个链表,得出链表长度len
int len=1; ListNode* l=head; while(l->next) { l=l->next; len++; }
    //将链表首尾相接
int move_k=k%len; if(move_k==0) return head; l->next=head;
    //找出新链表的尾节点
for(int i=0;i<len-move_k;i++) l=l->next;
    //断环 形成新链表 ListNode
* newhead=l->next; l->next=nullptr; return newhead; } };

 

【LeetCode每日一题】61. 旋转链表

原文:https://www.cnblogs.com/Almicro/p/14587906.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!