题目描述
找出单向链表中的一个节点,该节点到尾指针的距离为K。链表的倒数第0个结点为链表的尾指针。要求时间复杂度为O(n)。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
}
链表节点的值初始化为1,2,3,4,5,6,7。
输入描述
该节点到尾指针的距离K
输出描述
该节点到尾指针的距离K
示例
输入
2
输出
6
备注
请自觉实现一个链表,将1到7依次加入链表,然后再寻找倒数第K个节点。要求加节点与找节点的操作复杂度均为O(n)。
题目解析
这个首先要算出整个链表的长度,求倒数第n个数,就是求正数的第(length-n)个数。这样就转化为了求链表第k个节点的值。
代码
import java.util.Scanner;
class ListNode
{
int val;
ListNode next=null;
ListNode(int val){
this.val=val;
}
}
public class Main
{
public static ListNode Find(ListNode head,int k)
{
ListNode p;
int len=0,count=0;
p=head;
while(p!=null)
{
len++;//统计链表长度
p=p.next;
}
p=head;
while(p!=null)
{
if(count==len-k)
return p;//统计链表长度
else
{
count++;
p=p.next;
}
}
return null;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
ListNode head=new ListNode(1);
ListNode p=head;
p.next=null;
for(int i=2;i<=7;i++)
{
ListNode q=new ListNode(i);
p.next=q;
p=q;
p.next=null;
}
p=Find(head,sc.nextInt());
System.out.print(p.val);
}
}