21 - Reverse Nodes in k-Group
来源:互联网 发布:hilook撕拉面膜知乎 编辑:程序博客网 时间:2024/06/10 01:13
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5
solution:方法一,用栈保存k个node,如果不够k个则判断是否包含头结点;将满k个结点的栈依次弹出然后就是reverse的结果;循环执行直到结束。
方法二,依次遍历list,将当前node放置在head处即可,用此方法还可以解翻转整个linklist的题。(leetcode论坛上看到的,相当简洁)
方法一,有run time error...死活没找到...lol...感觉逻辑部分没问题,但是其它问题也没找到...纠结了...先pull上来...以后再修改
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *reverseKGroup(ListNode *head, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function if(k <= 1 || head ==NULL) return head; ListNode *node = head; ListNode *newHead = NULL; ListNode *pre = NULL; vector<ListNode *>rev(k); while( node != NULL ) { int len = k; while(len > 0) { if(node == NULL) { if(newHead == NULL) return head; return newHead; } rev.push_back( node ); node = node -> next; len --; } while( !rev.empty() ) { if(newHead == NULL) { newHead = rev.back(); rev.pop_back(); pre = newHead; } else { pre -> next = rev.back(); pre = pre -> next; rev.pop_back(); } } pre -> next = node; } return newHead; }};
方法二:终于通过了
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *reverse(ListNode *pre, ListNode *next) { ListNode *last = pre -> next; ListNode *cur = last -> next; while( cur != next ) { last -> next = cur -> next; cur -> next = pre -> next; pre -> next = cur; cur = last -> next; } return last; } ListNode *reverseKGroup(ListNode *head, int k) { // Start typing your C/C++ solution below // DO NOT write int main() function if( k <= 1 || head == NULL) return head; ListNode *newHead = new ListNode(0); newHead -> next = head; ListNode *node = head; ListNode *pre = newHead; int i = 0; while( node != NULL ) { i++; if( i == k ) { pre = reverse(pre, node->next); node = pre -> next; i = 0; } else { node = node -> next; } } return newHead -> next; }};
- 21 - Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in K-Group
- Reverse Nodes in k-Group
- Reverse Nodes In K Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- Reverse Nodes in k-Group
- 敏捷开发推荐图书
- POJ题目分类
- 查询系统负载信息 Linux 命令详解
- 流程控制语句
- mmc一维下料(切口)例子
- 21 - Reverse Nodes in k-Group
- imageView代码实现设置图片大小
- Activity的两种启动模式:FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- JAVA基础知识学习笔记(流程控制、数组)
- 切换动画overridePendingTransition切换无响应的方法
- activity切换时的overridePendingTransition动画效
- 解决Android中TextView首行缩进的问题 .
- ScrollView嵌套ListView只显示一行的问题
- centos6下yum安装lnmp