题目:输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。
- 解法一:用一个数组装着所有节点
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
ListNode temp = pHead;
int size = 0;
ArrayList<ListNode> nodes = new ArrayList<ListNode>();
while(temp!=null){
size++;
nodes.add(temp);
temp=temp.next;
}
if(size<k)
return null;
if(k<=0)
return null;
return nodes.get(size - k);
}
- 解法二:设置指针p1和p2,先让p1移动k个节点,p2不动,再同时移动p1和p2,当p1到达链表尾部,则p2就是倒数第k个节点
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
ListNode p1 = pHead;
ListNode p2 = pHead;
while(p1!=null & k>0){
p1 = p1.next;
k--;
}
if(k!=0)
return null;
while(p1!=null){
p1=p1.next;
p2=p2.next;
}
return p2;
}