题目:
输入一个链表,输出该链表中倒数第k个结点。
分析:
解法一: 第一遍遍历链表,得到链表长度;
得到正着数的链表节点;
返回(注意边界条件)
解法二: 第一遍遍历链表,每走一个节点,k减少1;
遍历完后,看k的值,若大于0,返回null(不存在该值)
k 小于0时,从头节点继续开始遍历该列表。
每经过一个节点,k加1,直到k等于0,
此时,返回该节点,即为目标节点!
代码如下:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
/* 方法1
if(head==null || k < 1){
return null;
}
int len = 0;
ListNode tmp = head;
while( tmp != null){
len++;
tmp = tmp.next;
}
if(k > len){
return null;
}
k = len - k;
tmp = head;
while(k != 0){
k--;
tmp = tmp.next;
}
return tmp;
*/
//方法2
if(head == null || k < 1){
return null;
}
ListNode tmp = head;
while(tmp != null){
k--;
tmp = tmp.next;
}
if(k > 0){
return null;
}else if(k == 0){
return head;
}else{
tmp = head;
while(k != 0){ 喵喵喵???
k++;
tmp = tmp.next;
}
return tmp;
}
}
}