輸入一個連結串列,輸出該連結串列中倒數第k個結點。
阿新 • • 發佈:2018-12-13
兩種思路:
1)用棧的思想,先把連結串列反轉,然後再找出第k個節點。
先把所有節點放進棧內,同時統計節點個數,若總節點數小於k則返回null。在彈出棧,倒數k即為彈出的第k個值。
2)定義兩個指標,一個指標先走k步,再兩者一起往後走,當第一個指標到達終點的時候,第二個指標剛好到達倒數第k點,因為他們之間的距離恆為k。
import java.util.List; import java.util.Stack; public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null) return null; int i=0; Stack<ListNode> stk = new Stack<ListNode>(); while(head!=null) { stk.push(head); //迴圈將連結串列中的節點壓入棧中 head=head.next; i++; } if(k>i) { return null; } ListNode result = null; while(k!=0){ result=stk.pop(); //將棧彈出k次,第k次彈出的節點就是我們要的倒數第k個節點 k--; } return result; } }
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null||k<=0) { return null; } ListNode pre=head;//第一個指標 ListNode last=head;//第二個指標 for(int i=1;i<k;i++) {//第一個指標走k-1步 if(pre.next!=null) { pre=pre.next; } else {//k大於連結串列的長度,找不到倒數第k個點 return null; } } //此時兩個指標一起運動 while(pre.next!=null) {//直到第一個指標是最後一個節點 pre=pre.next; last=last.next; } return last; } }