java实现剑指Offer第15题“链表中倒数第 k 个结点”
2017-04-28 16:21
330 查看
参考博文链接:http://www.cnblogs.com/edisonchou/p/4769164.html
package com.puhua.list;
public class PrintReciprocalLinkedListNumber {
}
package com.puhua.list;
public class ListNode {
}
package com.puhua.list;
public class PrintReciprocalLinkedListNumber {
/** * 题目:输入一个链表,输出该链表中倒数第 k 个结点。 * 为了符合大多数人的习惯,本题从 1 开始计数,即链表的尾结点是倒数第一个结点。 * 例如一个有 6 个结点的链表,从头结点依次是 1,2,3,4, 5,6。倒数第三个结点就是值为 4 的结点。 */ /** * 解题思路:为了能够只遍历一次就能找到倒数第k个节点,可以定义两个指针: * (1)第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动; * (2)从第k步开始,第二个指针也开始从链表的头指针开始遍历; * (3)由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时, * 第二个指针(走在后面的)指针正好是倒数第k个结点。 */ public static void main(String[] args) { //实例化6个链表结点 ListNode head=new ListNode(); ListNode second=new ListNode(); ListNode third=new ListNode(); ListNode forth=new ListNode(); ListNode fifth=new ListNode(); ListNode sixth=new ListNode(); //将六个结点前后串起来 head.next=second; second.next=third; third.next=forth; forth.next=fifth; fifth.next=sixth; //六个结点分别赋值 head.data=1; second.data=2; third.data=3; forth.data=4; fifth.data=5; sixth.data=6; //实例化当前类,实例p PrintReciprocalLinkedListNumber p=new PrintReciprocalLinkedListNumber(); ListNode resultListNode=p.findKToTail(head, 3); System.out.println(resultListNode.data); } public ListNode findKToTail(ListNode head, int k){ if(head==null||k==0){ return null; } ListNode ahead=head; ListNode behind=head; //先让ahead遍历到顺数k-1的位置 for(int i=0;i<k-1;i++){ if(ahead.next!=null){ ahead=ahead.next; }else{ return null; } } //ahead和behind同时开始遍历,直到ahead走到了链表的尽头,也就意味着behind到了倒数第k位 while(ahead.next!=null){ ahead=ahead.next; behind=behind.next; } return behind; }
}
package com.puhua.list;
public class ListNode {
int data; ListNode next;
}
相关文章推荐
- 数据结构-java与c实现带头结点的单链表
- 编程之美—面试题15 链表中倒数第K个结点(java实现)
- Java实现链表之结点
- (学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
- 数据结构与算法分析笔记与总结(java实现)--链表2:倒数第k个结点问题(k从1开始)
- 数据结构与算法分析笔记与总结(java实现)--链表9:有序环形链表中插入新结点问题
- 《剑指offer》编程题java实现(十九):链表中环的入口结点
- (整理)Java实现链表--找到两个链表的第一个公共结点(网易笔试题2016)
- 有头结点的单链表(java实现)
- 【LeetCode-面试算法经典-Java实现】【025-Reverse Nodes in k-Group(单链表中k个结点一组进行反转)】
- 数据结构与算法分析笔记与总结(java实现)--链表6:两个链表找公共结点问题
- 《剑指offer》编程题java实现(十八):删除链表的结点
- 链表中的入口结点java实现
- 删除链表中重复的结点java实现
- 无头结点的单链表(java实现)
- 【剑指offer——JAVA实现】链表中环的入口结点
- 数据结构与算法分析笔记与总结(java实现)--链表10:输入某个结点删除单向链表中的该结点
- 数据结构与算法分析笔记与总结(java实现)--链表14:删除链表中所有指定值结点问题
- 【剑指offer——JAVA实现】链表中倒数第k个结点(含思路解答示意图)
- 数据结构与算法分析笔记与总结(java实现)--链表7:含环链表找环入口结点问题