链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
分析
方法一:
先求得链表的总长度,然后再依次for循环遍历到len-k个即可
方法二:
定义两个临时节点都指向头节点,第一个节点先走k步,然后两个节点一起走,最后当一个节点走到尾的时候,第二个节点便到了倒数第k个节点了。
代码
代码一:
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0){
return null;
}
int len=0;
ListNode temp=head;
while (temp!=null){
temp=temp.next;
len++;
}
// System.out.println(len);
if (len-k<0){
return null;
}
for (int i=1;i<=(len-k);i++){
head=head.next;
if (head==null){
return null;
}
}
return head;
}
代码二:
public static ListNode FindKthToTail2(ListNode head,int k){
if(head==null||k<=0){
return null;
}
ListNode temp1=head,temp2=head;
while (temp2!=null && k-->0){
temp2=temp2.next;
}
if (temp2==null && k!=0){
return null;
}
while (temp2!=null){
temp1=temp1.next;
temp2=temp2.next;
}
return temp1;
}