问题:输入一个单链表,输出该链表中倒数第k个结点。例如一个链表从头结点开始,各结点的值依次为1,2,3,4,5,6。倒数第3个结点的值为4。
思路:看到此题的第一想法,应该是想将链表从头到尾遍历一次,统计出链表有多少个结点,到处第k个结点在正数n-k+1处,在重新遍历一次,遍历到n-k+1个结点处,就是我们需要找到的那个结点。
但是这样子的解决方法,需要对链表遍历2次,面试官肯定会不满意,我们需要找到更高效的方法。
用2个指针同时标记是解决链表问题的常用解决方法。 我们使用p1p2两个指针,将p1从链表头结点开始遍历,当p1经过k个结点时,p2也从头结点开始向后遍历
这样p1和p2两个指针的距离为k-1,当p1到达链表尾时,即p2->next==NULL,此时p1所指向的结点就是我们需要找到的倒数第k个结点。