問題:輸入鏈表頭,以及k的值,返回鏈表倒數(shù)第k個值
解題思路
新建兩個指針,指針1和指針2,都指向鏈表頭,指針2 先往前移 k-1位停在第k位,之后指針1指針2開始同步向前移,這樣指針1 指針2距離始終保持在k-1。當指針1的next是空的時候,指針2 所指的位置就是倒數(shù)第k個節(jié)點了。(記得考慮邊界情況)
public class ListNode_Test {
public static class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
public static ListNode FindKthToTail(ListNode head,int k){
ListNode Pointer1 = head;
ListNode Pointer2 = new ListNode(0);
//頭不能為空,倒數(shù)第幾個,幾要大于0
if(head == null || k <= 0){
return null;
}
for(int i =1;i<k;i++){
if( Pointer1.next!=null){
Pointer1 = Pointer1.next;
}else {
System.out.println(i);
return null;
}
}
Pointer2 = head;
while(Pointer1.next!=null){
Pointer1 = Pointer1.next;
Pointer2 = Pointer2.next;
}
return Pointer2;
}
public static void main(String[] args){
//建立鏈表(1到10)
ListNode head = new ListNode(1);
ListNode p = head;
System.out.println(p.val);
for(int i=2;i<11;i++){
p.next = new ListNode(i);
p = p.next;
System.out.println(p.val);
}
int k =2;
int ans = FindKthToTail(head,k).val;
System.out.println("The kth inverse :" + ans );
}
}