链表中倒数第k个结点
剑指 offer
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:
使用两个指针,第一个直线先指向第 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) {
ListNode first=head,second=head;
int num=0;
while(first!=null){
first=first.next;
num++;
if(num==k){
break;
}
}
if(num!=k){
return null;
}
while(first!=null){
first=first.next;
second=second.next;
}
return second;
}
}
相关题目:
求链表的中间结点。如果链表中的结点总数为奇数,则返回中间结点,如果结点数是偶数,则返回中间两个结点的任意一个。 同样方法两个指针一个移动一步,一个移动两步,当走的快的指针走到链表的末尾时,走的慢的指针正好在链表的中间。
才学疏浅,有什么问题请大家指出来。十分感谢!