题目:
输入一个链表,输出该链表中倒数第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; } } }