#找出单向链表中的一个节点,该节点到尾指针的距离为K。链表的倒数第0个结点为链表的尾指针。要求时间复杂度为O(n)。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
}
链表节点的值初始化为1,2,3,4,5,6,7。
(…)
import java.util.Scanner;
public class Main {
//定义链表节点
static class ListNode
{
int m_nKey;
ListNode m_pNext;
}
//main函数入口
public static void main(String[] args) throws Exception {
//创建链表对象
ListNode node1 = new ListNode();
ListNode head =node1;
head.m_nKey=1;
for(int i=2;i<8;i++){
ListNode node2 = new ListNode();
node2.m_nKey=i;
node1.m_pNext=node2;
node1=node1.m_pNext;
}
Scanner sc = new Scanner(System.in);
int next = sc.nextInt();
ListNode a = findLast(head, next);
System.out.println(a.m_nKey);
}
//定义两个指针,一个快指针和一个慢指针,快指针比慢指针快k步,
// fast先走k步,然后fast、slow一起走 ,直到fast为空,slow节点即为所求
public static ListNode findLast(ListNode head,int k){
ListNode fast = head;
ListNode slow = head;
for(int i=0;i<k;i++){
if(fast!=null){
fast=fast.m_pNext;
}else{
return null ;
}
}
while(fast!=null){
fast=fast.m_pNext;
slow = slow.m_pNext;
}
return slow;
}
}
(…)