题目描述
输入一个链表,输出该链表中倒数第k个结点
思路
- 最开始就是在想说从头开始找到第k个节点,后来发现人家是要找到倒数的;立马傻眼了;因为链表给的是单向的;而且没有尾节点你也不可能反向找啊;
- 书上的想法就油然而生了,因为我的链表只放了1,2,3三个节点,所以我就想一边遍历带两个指针,后一个开始比前一个晚2个元素;指向倒数第三个;然后一直到队尾;
代码
123456789101112131415161718static public ListNode FindKthToTail(ListNode head,int k) {if (head==null||k<=0)return null;ListNode ahead = head;ListNode behind = head;for ( int i =0;i<k-1;i++){if (ahead.next==null)return null;ahead=ahead.next;}while (ahead.next!=null){ahead=ahead.next;behind=behind.next;}return behind;}
收获
- 人家讲书读百遍,其义自见;题多做了几道对于测试用例还是稍微敏感了一些
- 任何数据结构都是很厉害的啊;
- 好玩的;指针一快一慢就有各种用处,一个走两步,一个走一步就可以找到中间节点;一个走得快,一个走得慢就可以检验是否是循环链表了;