题目:
输入一个链表,输出该链表中倒数第k个结点。
思路:
遍历整个链表,每到一个结点k--,若k不等于0再遍历结点,每到一个结点k++,直到k等于0。
过去提交的通过的答案:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head==null||k<1) { return null; } ListNode cur=head; while(cur!=null) { k--; cur=cur.next; } System.out.println("k的值为"+k); cur=head; if(k>0) { return null; } while(k!=0) { ++k; cur=cur.next; } return cur; } }
再次写一次的答案,带测试用例:
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Solution01 { public ListNode FindKthToTail(ListNode head,int k) { if (head==null||k<=0) { return null; } ListNode p=head; while(p!=null) { k--; p=p.next; } if (k>=1) { return null; } ListNode cur=head; while(k!=0) { k++; cur=cur.next; } return cur; } public static void main(String[] args) { Solution01 s=new Solution01(); ListNode n1=new ListNode(8); ListNode n2=new ListNode(7); ListNode n3=new ListNode(11); ListNode n4=new ListNode(13); ListNode n5=new ListNode(243); ListNode n6=new ListNode(16); n1.next=n2; n2.next=n3; n3.next=n4; n4.next=n5; n5.next=n6; ListNode res=s.FindKthToTail(n1,3); System.out.println(res.val); } }