输入一个链表,找到倒数第K个节点。使得只扫描一次链表。
2017-02-20 19:29
375 查看
输入一个链表,找到倒数第K个节点。使得只扫描一次链表。
思路:两个指针p,q。p先扫K个,然后p,q同时向后,p到表尾的时候,q所指向的就是倒数k个节点。注意代码的鲁棒性(健壮性)排除异常输入。
思路:两个指针p,q。p先扫K个,然后p,q同时向后,p到表尾的时候,q所指向的就是倒数k个节点。注意代码的鲁棒性(健壮性)排除异常输入。
package com.mytest.mymain; class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class FindKthtotail { public static void main(String[] args) { FindKthtotail findKthtotail=new FindKthtotail(); ListNode One =new ListNode(2); ListNode Two =new ListNode(3); ListNode Third =new ListNode(4); ListNode Four =new ListNode(5); ListNode Five =new ListNode(6); One.next=Two; Two.next= Third; Third.next=Four; Four.next=Five; ListNode head=new ListNode(1); head.next=One; ListNode result=findKthtotail.FindKthToTail(head,3); System.out.println(result.val); } public ListNode FindKthToTail(ListNode head, int k) { if (head == null || k <= 0) return null; ListNode pListNode = head, qListNode = head; for (int i = 1; i < k; ++i) { if (pListNode.next != null) { pListNode = pListNode.next; } else { return null; } } while (pListNode.next != null) { qListNode = qListNode.next; pListNode = pListNode.next; } return qListNode; } }
相关文章推荐
- 20140719 找到单链表的倒数第K个节点 判断一个链表是否成为一个环形 反转
- 微软面试之13 输入一个单向链表 输出该链表的倒数第k个节点
- 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针
- 面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- 输入一个单向链表,输出该链表中倒数第k个结点
- 每天一个小算法(5)----找到链表倒数第K个结点
- 13输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- 每天学习一算法系列(13) (输入一个单向链表,输出该链表中倒数第k个结点)
- 输入一个单向链表,输出该链表中倒数第K个结点
- 输入一个单向链表,输出该链表中倒数第k个结点
- 13、输入一个单向链表,输出该链表中倒数第k个结点
- 给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 输入一个单向链表,输出该链表中倒数第K个结点
- 【数据结构】给出一个链表,遍历一次就找到中间节点
- 给出一个单向链表的头指针,输出该链表中倒数第K个节点的指针
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- C实现简单单向链表,一次遍历查找倒数第k个节点的值
- 输入一个单向链表,输出该链表中倒数第k个结点
- 输入一个单向链表,输出其倒数第k个结点