旋转链表
来源:互联网 发布:学校打铃软件 编辑:程序博客网 时间:2024/05/02 02:02
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例
给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null
#include <iostream>using namespace std;//Definition for singly-linked list.struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution {public:/*** @param head: the list* @param k: rotate to the right k places* @return: the list after rotation*/ListNode* Init(ListNode* head){int val = 0;ListNode* p = NULL;while (true){cin >> val;if (-1 == val){return head;}if (NULL == head){head = new ListNode(val);p = head;}else{p->next = new ListNode(val);p = p->next;}}}int getListLength(ListNode* head){int count = 0;if (NULL == head){return 0;}else{ListNode* p = head;while (p!=NULL){count++;p = p->next;}}return count;}ListNode *rotateRight(ListNode *head, int k) {// write your code hereint len = getListLength(head);if (0 == len || NULL == head){return 0;}k = k%len;if (k == len || 0 == k)//反转的次数和长度一样或者反转的长度为0,直接返回{return head;}ListNode* tail = NULL;ListNode* prev = head;ListNode* p = head;int count = len - k;count--;//因为这个链表没有头结点,头就是第一个节点,所以要先减一while (count--){p = p->next;}tail = p->next;p->next = NULL;p = tail;while (p->next!=NULL){p = p->next;}p->next = prev;return tail;}void Out(ListNode* head){if (head !=NULL){ListNode* p = head;while (p){cout << p->val << " ";p = p->next;}}cout << endl;}};int main(){ListNode* head = NULL;Solution s;head = s.Init(head);s.Out(head);int k = 0;cin >> k;head = s.rotateRight(head, k);s.Out(head);return 0;}
1 0
- 单向链表旋转
- 旋转链表
- LintCode-旋转链表
- LintCode-旋转链表
- 旋转链表
- LintCode:旋转链表
- 旋转链表
- 旋转链表
- 链表旋转
- 旋转链表
- 旋转链表
- 旋转链表
- LintCode : 旋转链表
- 旋转链表
- 旋转链表-LintCode
- 61.链表旋转
- Rotate List 旋转链表
- 旋转链表,递归实现
- win7命令行常用命令
- Manage Code 托管代码
- matlab simulink 使用总结
- 简单java类
- 《leetCode》:Number of Islands
- 旋转链表
- spring security+mybatis+springMVC构建一个简单的项目
- poj之旅——3045
- 【工具】UML工具
- mysql小笔记
- LeetCode之6---ZigZag Conversion
- 学生破解极域电子教室的破解器
- NYOJ 1036 非洲小孩(水题)
- POJ-3177-Redundant Paths【双连通分支】