链表——按k个结点一组来反转链表
来源:互联网 发布:桂正和m知乎 编辑:程序博客网 时间:2024/06/05 11:59
题目:按k个结点一组来反转链表
思路:
运用反转链表的通法reverse,对链表进行循环,当计数长度k不时,指针继续前进;当计数长度到达k时,将该组首尾节点first和node作为参数传入翻转函数reverse进行翻转,然后重新拼接到原链表中。直至到达链表末尾。
代码如下:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode reverseKGroup(ListNode head, int k) { if(head == null||head.next == null||k<=1) return head; ListNode node=head; ListNode helper=new ListNode(0);//创建一个辅助的头结点; helper.next=head;//当k> length of list时,返回原链表; ListNode lastgroup=helper;//记录上一组结点的尾结点; ListNode nextgroup=head;//辅助记录下一组结点的首结点; ListNode first=nextgroup;//记录下一组结点的首结点; int count=1; while(node!=null) { if(count<k) { count++; node=node.next; }else//count == k; { nextgroup=node.next; lastgroup.next=reverse(first,node); lastgroup=first; first.next=nextgroup; first=nextgroup; node=first; count=1; } } return helper.next; } //字符串反转通用方法; public ListNode reverse(ListNode head,ListNode tail) { ListNode pre=head; ListNode cur=head.next; ListNode ne=null; while(pre!=tail) { ne=cur.next; cur.next=pre; pre=cur; cur=ne; } head.next=null; head=pre; return head; }}
0 0
- 链表——按k个结点一组来反转链表
- 单链表中k个结点一组进行反转
- Leetcode017--链表k个结点一组翻转
- 以k个元素为一组反转单向链表
- 以k个元素为一组反转单向链表
- 链表中倒数第 K 个结点-反转链表
- LeetCode | Reverse Nodes in k-Group(k个结点一组翻转链表)
- [leetcode]Reverse Nodes in k-Group 反转以k个节点为一组的链表
- 【LeetCode-面试算法经典-Java实现】【025-Reverse Nodes in k-Group(单链表中k个结点一组进行反转)】
- leetCode 25.Reverse Nodes in k-Group (以k个节点为一组反转链表) 解题思路和方法
- 《剑指offer》--- 链表中的倒数第k个结点 和 反转链表
- 反转单链表的前k个结点
- 链表翻转(按K个一组)
- 链表——循环右移链表的后K个结点
- 链表倒数第k个结点
- 单向链表倒数k个结点
- 单链表逆置,反转,并查找倒数第K个结点
- 华为机试——单向链表倒数第k个结点
- Visual Studio 2015 快捷键
- Unity开发者的C#内存管理(上篇)
- java-文件io
- file命令用法
- 3.直接插入排序,希尔排序,归并排序
- 链表——按k个结点一组来反转链表
- 【C#设计模式-状态模式】
- OpenUDID冲突的问题
- java enum 举例
- UVA_820_Internet Bandwidth
- 输入一组数,创建(带头节点)的单链表(头插法、尾插法)
- C#对于字符串的处理类(剪裁、过滤危险字符、替换sql中有问题符号等)
- iOS动画编程-2
- Redis CrackIT入侵事件分析