翻转单链表中的K个节点——By Java
2013-06-24 22:44
176 查看
public class LinkListReverseK { /** * 题目要求:给定一个单链表和一个参数K,要求翻转K个节点,且翻转后剩余的节点数大于K则继续翻转,否则停止; * 例如:链表:1,2,3,4,5,6,7,8,9,10;K=4;则应有结果:8,7,6,5,4,3,2,1,9,10; * 思路:在传统的链表翻转的基础上,计算出一共需要翻转的节点数目,每次循环只改变一个节点的指向直至计数器为0; * @param args * @author Adai * @since 2013/06/24 */ private static class LinkNode{ private int data; private LinkNode next; /** * @return the data */ public LinkNode(){ } public LinkNode(int d){ this.data=d; this.next=null; } public int getData() { return data; } /** * @param data the data to set */ public void setData(int data) { this.data = data; } /** * @return the next */ public LinkNode getNext() { return next; } /** * @param next the next to set */ public void setNext(LinkNode next) { this.next = next; } } public static void main(String[] args) { // TODO Auto-generated method stub int[] a={1,2,3,4,5,6,7,8,9,10}; LinkListReverseK llrk=new LinkListReverseK(); LinkNode h=llrk.Init(a); LinkNode r=llrk.LinkReverse(h,4); while(r!=null){ System.out.println(r.getData()); r=r.next; } } private LinkNode Init(int[] a){ LinkNode head=null; LinkNode last=null; for(int i=0;i<a.length;i++){ LinkNode one=new LinkNode(a[i]); if(last!=null){ last.next=one; last=one; } if(i==0){ head=one; last=one; } } return head; } private LinkNode LinkReverse(LinkNode head,int k){ if(head==null) return null; if(k<1) return head; LinkNode run=head; int count=0; while(run!=null){ count++; run=run.next; } if(count<k){ return head; } int times=count/k; times=times*k; System.out.println("times="+times); LinkNode p=head; LinkNode q=null; LinkNode r=null; while(times>0){ System.out.println("dd:"+p.getData()+":"+times); q=p.next; p.next=r; r=p; p=q; times--; } head.next=q; return r; } }
相关文章推荐
- [leetcode]Reverse Nodes in k-Group 反转以k个节点为一组的链表
- 单链表查找倒数K个节点
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- 链表的总结(链表排序、翻转、删除节点)
- 删除链表倒数k个节点
- [LeetCode] 25. Reverse Nodes in k-Group 每k个一组翻转链表
- [leetcode 24]Swap Nodes in Pairs-----成对翻转链表中的节点
- [2014美团网笔试]给定一个单链表和一个整数k,要求每隔k个元素翻转链表
- python 链表中倒数第n个节点 & 翻转链表
- 链表的典型题:找到链表倒数K个节点、链表逆转、合并两个链表
- 链表以k个一组进行翻转(2014美团研发笔试)
- 每K个元素翻转一次链表,若最后剩余元素不足K个,不进行翻转(美团2014校招试题)
- 逆置、翻转链表/查找单链表的倒数第k个节点/A+B不使用四则运算++ -- 等
- 单向链表的创建、节点删除、链表输出、翻转(写法参考计蒜客数据结构课程)
- 链表操作之翻转链表以及求倒数第K个节点
- [LeetCode] Reverse Nodes in k-Group 每k个一组翻转链表
- leetCode 25.Reverse Nodes in k-Group (以k个节点为一组反转链表) 解题思路和方法
- 翻转有序链表的部分节点(美团)
- 链表面试题(二):冒泡排序、合并两个有序链表、查找中间节点、查找倒数K个节点
- C++中链表的创建、输出、节点删除、节点插入、翻转、清空