输入一个链表,输出该链表中倒数第k个结点
额 1.想法很简单 首先想到遍历一个把数放到一个栈里面,然后输出第k个。然后就是首先遍历一遍数组,找到链表长度,然后我再从头开始依次遍历(长度-k次)。
2.看评论的想法说,两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指针走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了 // 其实差不多 就是一个指针走k-1步,到达k节点,假设链表长度为n,那么它再走n-k步就可以到达链表末尾。那另一个指针跟着一起走n-k步,那么它到达的节点就是倒数第k的节点了。少做一次遍历。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
int count=1;
if(head==null){
return null;
}
ListNode first = head;
while(head.next!=null){
count++;
head=head.next;
}
if(k<=count){
for(int i=0;i<count-k;i++){
first=first.next;
}
return first;
}else{
return null;
}
}
}
网友评论