leetcode_61_Rotate List
来源:互联网 发布:php专用提权大马 编辑:程序博客网 时间:2024/06/11 23:48
欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢
Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.
注意一点,K可能非常大,比链表的长度大得多,但是因为是循环右移,所以实际上只要循环右移K%Length位(Length为链表长度)。
//没理解好题意,写成了将右边k个数字移到前面,但是也能通过//注意一点,K可能非常大,比链表的长度大得多,但是因为是循环右移,所以实际上只要循环右移K%Length位(Length为链表长度)。class Solution {public: ListNode *rotateRight(ListNode *head, int k) { if(head==NULL) return head;int len = getlistlen(head);k = k%len;int n = len - k;if(k==0)return head;ListNode *first=head;for(int i=0; i<n-1; i++){first = first->next;}ListNode *head2 = first->next;first->next = NULL;ListNode *second = head2;for(int i=0; i<k-1; i++){second = second->next;}second->next = head;return head2; }private:int getlistlen( ListNode *head){int len=0;while(head){len++;head = head->next;}return len;}};
//另一种写法class Solution {public: ListNode *rotateRight(ListNode *head, int k) { if (head == NULL || head->next == NULL || k == 0) { return head; } int length = 0; ListNode *ptr = head, *tail = head; while (ptr != NULL) { length++; tail = ptr; ptr = ptr->next; } k %= length; ptr = head; for (int i = 0; i < length - k - 1; i++) { ptr = ptr-> next; } tail->next = head; head = ptr->next; ptr->next = NULL; return head; }};
#include<iostream>using namespace std;#define N 5struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};//没理解好题意,写成了将右边k个数字移到前面,但是也能通过class Solution {public: ListNode *rotateRight(ListNode *head, int k) { if(head==NULL) return head;int len = getlistlen(head);k = k%len;int n = len - k;if(k==0)return head;ListNode *first=head;for(int i=0; i<n-1; i++){first = first->next;}ListNode *head2 = first->next;first->next = NULL;ListNode *second = head2;for(int i=0; i<k-1; i++){second = second->next;}second->next = head;return head2; }private:int getlistlen( ListNode *head){int len=0;while(head){len++;head = head->next;}return len;}};ListNode *creatlist(){ListNode *head = NULL;ListNode *p;for(int i=0; i<N; i++){int a;cin>>a;p = (ListNode*) malloc(sizeof(ListNode));p->val = a;p->next = head;head = p;}return head;}int main(){ListNode *list = creatlist();Solution lin;int a;cin>>a;ListNode *outlist = lin.rotateRight ( list,a );for(int i=0; i<N; i++){cout<<outlist->val;outlist = outlist->next;}}
1 0
- leetcode_61_Rotate List
- leetcode_61_Rotate List
- List
- list
- List
- LIST
- list
- list
- List
- list
- list
- List
- list
- LIST
- List
- List
- List
- list
- 笔记
- TWaver 3D作品Viewer查看器
- iOS 在UILabel显示不同的字体和颜色
- 关键字提取linux版本编译教训总结
- 【Web测试专栏】Selenium+JUnit自动化测试方案 (四)
- leetcode_61_Rotate List
- Qt中Ui名字空间以及setupUi函数的原理和实现
- Tomcat中JVM内存溢出及合理配置
- 动态内存的传递
- Linux多线程 教程及相关定义
- 真正的入门—提高班的学习
- BestCoder #Valentine's Day Round 1002 || hdu 5175
- 算法精解十六(C语言版)
- Java代码规范、格式化和Checkstyle配置