求链表中倒数第k个结点-Java实现
2017-02-14 10:51
316 查看
/* 需求:求链表中倒数第k个结点 思路:需要有两个指针,第一个指针先走k-1步,然后两个指针一起走 当第一个指针走到链表结尾时,第二个指针到达倒数第k个结点 解法: 1,Java如何定义链表? 链表是一个类,属性包括头结点和结点总数(此处必须考虑这个属性,因为需要跟k比较) 每个结点又是一个类,属性包括数据域和指向下一个结点的引用 2,创建一个链表 3,求倒数第k个结点 */ //结点类 class Nod { public int data;//定义结点数据域 public Nod next=null;//定义指向下一个结点的引用 public Nod(int data) { this.data=data; } } //链表类 class LinkList { public Nod head=null;//初始化链表头结点为空 private int nodeCount;//定义链表结点总数 //增加结点 public void addNod(int d) { Nod newNode=new Nod(d); //若头结点为空,则让新增加的结点作为头结点 if (head==null) { head=newNode; nodeCount++; return; } //头结点不为空时,找到链表最后一个结点,在其后增加新节点 Nod temp=head; while (temp.next!=null) { temp=temp.next; } temp.next=newNode; nodeCount++; } //获取链表结点总数 public int getCount() { return nodeCount; } } class FindKthToTail { public static Nod findKthToTail(int k) { if (k==0) { System.out.println("k不能为0!"); return null; } //创建链表 LinkList ll=new LinkList(); ll.addNod(1); ll.addNod(2); ll.addNod(3); ll.addNod(4); ll.addNod(5); ll.addNod(6); int count=ll.getCount(); //判断链表是否为空 if (count==0) { System.out.println("链表为空!"); return null; } //判断链表结点总数和k的关系 if (k>count) { System.out.println("k大于链表结点总数!"); return null; } //第一个引用先走k-1步 Nod p1=ll.head; for (int i=0;i<k-1 ;i++ ) { p1=p1.next; } //两个引用一起走,知道第一个引用走到链表末尾 Nod p2=ll.head; while (p1.next!=null) { p1=p1.next; p2=p2.next; } return p2; } public static void main(String[] args) { Nod k=findKthToTail(0); System.out.println("data:"+k.data); } }
相关文章推荐
- java实现输入一个链表,输出该链表中倒数第k个结点。
- 剑指offer--面试题15:链表中倒数第K个结点--Java实现
- 【剑指offer——JAVA实现】链表中倒数第k个结点(含思路解答示意图)
- 数据结构与算法分析笔记与总结(java实现)--链表2:倒数第k个结点问题(k从1开始)
- 输入链表输出该链表倒数第k个结点java实现
- 剑指Offer:面试题15——链表中倒数第k个结点(java实现)
- 编程之美—面试题15 链表中倒数第K个结点(java实现)
- 链表中倒数第k个结点(java版)
- 剑指offer:链表中倒数第k个结点(java)
- java实现单向链表CRUD,反转,排序,查找倒数第k个元素,递归输出等操作
- 剑指offer面试题15(java版):链表中倒数第k个结点
- 剑指Offer(Java版):链表中倒数第K个结点
- JAVA实现链表中倒数第K个节点问题(《剑指offer》)
- 链表中倒数第k个节点java实现
- 查找链表中倒数第k个结点 C++实现
- 链表中倒数第k个结点[剑指offer]之python实现
- 剑指Offer面试题15(Java版):链表中倒数第K个结点
- 链表中倒数第k个结点java
- 剑指offer第十四题【链表中倒数第k个结点】c++实现
- 剑指Offer面试题15(Java版):链表中倒数第K个结点