博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rotate List - LeetCode
阅读量:5061 次
发布时间:2019-06-12

本文共 1678 字,大约阅读时间需要 5 分钟。

目录

题目链接

注意点

  • k可能会大于链表长度

解法

解法一:首先遍历一遍链表得到链表的长度,k对其取余数。然后设置快慢指针,快指针先走k步,然后快慢指针一起走,当快指针走到底的时候,慢指针也走到了新的链表头结点的前一个结点,这时候修改快慢指针的指向就好了。时间复杂度O(n)。

/** * 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 == NULL) return head;        int i,n = 0;        ListNode* p = head;        while(p != NULL)        {            p = p ->next;            n++;        }        //cout << n;        k %= n;        ListNode* fast = head;        ListNode* slow = head;        while(k > 0)        {            fast = fast->next;            k--;        }        //if(fast == NULL) return head;        while(fast->next != NULL)        {            fast = fast->next;            slow = slow->next;        }        fast->next = head;        fast = slow->next;        slow->next = NULL;        return fast;    }};

874b0eb1ly1g0kzo7r86mj210k0ixjs6.jpg

解法二:同样首先遍历一遍链表得到链表的长度,k对其取余数。将链表尾和链表头相连,然后继续往后遍历(也就是从头开始)n-k个结点,这时正好指向新的链表头结点的前一个结点。时间复杂度O(n)

/** * 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 == NULL) return head;        int i,n = 1;        ListNode* p = head;        while(p->next != NULL)        {            p = p ->next;            n++;        }        p->next = head;        k %= n;        for(i = 0;i < n-k;i++) p = p->next;        ListNode* ret = p->next;        p->next = NULL;        return ret;    }};

874b0eb1ly1g0kzwonbhlj20z20ib3za.jpg

小结

  • 链表题

转载于:https://www.cnblogs.com/multhree/p/10443859.html

你可能感兴趣的文章
js中比较实用的函数用法
查看>>
安装预览版镜像后无法检测到预览版更新的解决方案
查看>>
【bzoj5099】[POI2018]Pionek 双指针法
查看>>
别让安全问题拖慢了 DevOps!
查看>>
JAR打包和运行
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>
测试计划
查看>>
idea设置自定义图片
查看>>
[高级]Android多线程任务优化1:探讨AsyncTask的缺陷
查看>>
选择器
查看>>
rownum 的使用
查看>>
Mysql与Oracle 的对比
查看>>
MVC系列博客之排球计分(三)模型类的实现
查看>>
npm安装
查看>>
阅读笔记02
查看>>
2019年春季学期第二周作业
查看>>
2014北邮计算机考研复试上机题解(上午+下午)
查看>>
mySQL 教程 第7章 存储过程和函数
查看>>
OGG同步Oracle到Kafka(Kafka Connect Handler)
查看>>