劍指offer-14:連結串列中倒數第k個結點
阿新 • • 發佈:2018-12-05
題目描述
輸入一個連結串列,輸出該連結串列中倒數第k個結點。
思路
兩個指標,先讓第一個指標和第二個指標都指向頭結點,然後再讓第一個指正走(k-1)步,到達第k個節點。然後兩個指標同時往後移動,當第一個結點到達末尾的時候,第二個結點所在位置就是倒數第k個節點處。
程式碼
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution14 {
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0){
return null;
}
ListNode p=head,q;
for(int i=1;i<k;i++){
if(p.next!=null){
p=p.next;
}else{
return null;
}
}
q=head;
while(p.next!=null){
p = p.next;
q=q.next;
}
return q;
}
public static void main(String[] args) {
ListNode node1=new ListNode(3);
ListNode node2=new ListNode(13);
ListNode node3=new ListNode( 21);
ListNode node4=new ListNode(33);
ListNode node5=new ListNode(23);
ListNode node6=new ListNode(42);
ListNode node7=new ListNode(28);
ListNode node8=new ListNode(19);
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=node5;
node5.next=node6;
node6.next=node7;
node7.next=node8;
System.out.println( new Solution14().FindKthToTail(node1,4).val);
}
}