博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode: Reverse Nodes in k-Group
阅读量:4982 次
发布时间:2019-06-12

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

从这题和上一题可以总结出反转链表的经验,需要有5个指针:end, q, p, pPre, pNext. p和pPre进行方向转置后p和pPre向后移,pNext用来记录转置前p的后一个,q用来记录转置串之前的node,end记录转置串最开始的node。

1 /** 2  * Definition for singly-linked list. 3  * struct ListNode { 4  *     int val; 5  *     ListNode *next; 6  *     ListNode(int x) : val(x), next(NULL) {} 7  * }; 8  */ 9 class Solution {10 public:11     ListNode *reverseKGroup(ListNode *head, int k) {12         // Start typing your C/C++ solution below13         // DO NOT write int main() function14         ListNode *pPre, *end, *p, *q;15         p = head;16         q = NULL;17         bool flag = true;18         while (flag) {19             end = pPre = p;20             ListNode *tmp = pPre;21             for (int i = 0; i < k; i++) {22                 if (tmp) tmp = tmp->next;23                 else {24                     flag = false;25                     break;26                 }27             }28             if (!flag) break;29             p = p->next;30             for (int i = 0; i < k-1; i++) {31                 ListNode *pNext = p->next;32                 p->next = pPre;33                 pPre = p;34                 p = pNext;35             }36             end->next = p;37             if (!q) head = pPre;38             else q->next = pPre;39             q = end;40         }41         return head;42     }43 };

 recursive的方法更好理解

1 /** 2  * Definition for singly-linked list. 3  * struct ListNode { 4  *     int val; 5  *     ListNode *next; 6  *     ListNode(int x) : val(x), next(NULL) {} 7  * }; 8  */ 9 class Solution {10 public:11     ListNode *reverseKGroup(ListNode *head, int k) {12         if (!head) return NULL;13         ListNode *p = head;14         int len = 0;15         for (; p && len < k; p = p->next) len++;16         if (len < k) return head;17         ListNode *pre = NULL;18         p = head;19         for (int i = 0; i < k; ++i) {20             ListNode *pnext = p->next;21             p->next = pre;22             pre = p;23             p = pnext;24         }25         head->next = reverseKGroup(p, k);26         return pre;27     }28 };

 C#

1 /** 2  * Definition for singly-linked list. 3  * public class ListNode { 4  *     public int val; 5  *     public ListNode next; 6  *     public ListNode(int x) { val = x; } 7  * } 8  */ 9 public class Solution {10     public ListNode ReverseKGroup(ListNode head, int k) {11         if (head == null) return null;12         ListNode p = head;13         int len = 0;14         for (; p != null && len < k; p = p.next) len++;15         if (len < k) return head;16         ListNode pre = null;17         p = head;18         for (int i = 0; i < k; i++) {19             ListNode pNext = p.next;20             p.next = pre;21             pre = p;22             p = pNext;23         }24         head.next = ReverseKGroup(p, k);25         return pre;26     }27 }
View Code

 

转载于:https://www.cnblogs.com/yingzhongwen/archive/2013/04/20/3032232.html

你可能感兴趣的文章
[Recompose] Add Local State to a Functional Stateless Component using Recompose
查看>>
Spring Boot + Spring Data + Elasticsearch实例
查看>>
我的机器学习之旅(一):认识机器学习
查看>>
util包下Timer类的延迟执行
查看>>
缓冲区溢出漏洞实验
查看>>
失业的程序员(十):分歧的产生
查看>>
[FZU2261]浪里个浪
查看>>
四则运算*2
查看>>
《Linux就该这么学》 - 必读的红帽系统与红帽linux认证自学手册
查看>>
名句名篇
查看>>
图像的基本运算——scale, rotation, translation
查看>>
OpenCV——PS滤镜, 碎片特效
查看>>
python-字典相关函数认识
查看>>
Java之IO流
查看>>
Lua学习笔记-C API
查看>>
浅析:Android 嵌套滑动机制(NestedScrolling)
查看>>
Python+Selenium练习篇之18-获取元素上面的文字
查看>>
php状态模式
查看>>
Asp.net C# 图像处理
查看>>
知识签名(signature of knowledge)
查看>>