面试题15:链表中的倒数第k个结点

来源:互联网 发布:外汇投资收益率知乎 编辑:程序博客网 时间:2024/06/13 22:58

剑指Offer面试题15:链表中倒数第k个结点

题目描述:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始他们的值依次是1,、2、3、4、5、6,这个链表的倒数第3个结点是值为4的结点。

    function LinkList() {        var Node = function(element){            this.element = element;            this.next = null;        }        var head = null;        //在尾部插入结点        this.append = function(element) {            var node = new Node(element),                current;            if(head === null) {                head = node;            }else{                current = head;                while(current.next) {                    current = current.next;                }                current.next = node;            }        }        //找出链表中的倒数第k个结点        this.FindKthToTail = function(k) {            if(k <= 0 || head === null) {                return null;            }            var p1 = head,                p2 = null;            for(var i = 0; i < k-1; i++) {                if(p1.next !== null) {                    p1 = p1.next;                }else{                    return null;                }            }            p2 = head;            while(p1.next) {                p1 = p1.next;                p2 = p2.next;            }            return p2.element;        }    }    var link = new LinkList();    link.append(1);    link.append(2);    link.append(3);    link.append(4);    link.append(5);    link.append(6);    console.log(link.FindKthToTail(1));

举一反三:
当我们用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表,可以让其中一个指针遍历的速度快一点(比如一次在链表中上走两步),或者先让它在链表上走若干步。

原创粉丝点击