题目:
输入一个链表,输出该链表中倒数第k个结点
思路:主要考虑 1. head为空 2.链表长度小于k 3.k=0 无符号减1会变成4294967295(Java有没有?)
public class Solution {
//两个指针,一前一后
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k <= 0){
return null;
}
ListNode pre = head; //先走k-1个指针
ListNode last = head;
for(int i = 1; i < k; i++){
if(pre.next != null){
pre = pre.next;
}else {
return null;
}
}
while(pre.next != null){
pre = pre.next;
last = last.next;
}
return last;
}
//栈,但是空间复杂度,当链表特别长,容易出现Stack Overflow问题
public ListNode FindKthToTail(ListNode head,int k) {
if(head == null || k == 0){
return null;
}
Stack<ListNode> stack = new Stack<ListNode>();
int count = 0;
while(head != null){
stack.push(head);
head = head.next;
count ++;
}
if(count < k){
return null;
}
ListNode node = null;
for(int i = 0; i < k; i++){
node = stack.pop();
}
return node;
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
}