输入一个链表,输出该链表中倒数第k个结点
我的做法:
思路:用一个栈,依次压进去,再弹出k个,弹出的第K个就是要找的。
注意k大于链长的情况。
public ListNode FindKthToTail(ListNode head,int k) { if(head==null) return null; int i=0; Stack<ListNode> ss = new Stack<ListNode>(); while(head!=null) { ss.push(head); head=head.next; i++; } if(k>i) { return null; } ListNode l = null; while(k!=0) {l=ss.pop();k--;} return l; }
巧妙的思路:
利用两个指针,先让第一个指针和第二个指针都指向头结点,
然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,
当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。
if(head==null||k<=0)return null; ListNode nodePre=head; ListNode nodeLast=head; for(int i=1;i<k;i++){ if(nodePre.next!=null)nodePre=nodePre.next; else return null; } while(nodePre.next!=null){ nodePre = nodePre.next; nodeLast=nodeLast.next; } return nodeLast;
posted on 2017-11-15 17:26 GuaNiu9978 阅读(201) 评论(0) 收藏 举报
浙公网安备 33010602011771号