[google面试CTCI] 2-2 找出链表的倒数第n个节点元素

来源:互联网 发布:淘宝上的优衣库代购 编辑:程序博客网 时间:2024/05/16 14:40

【链表】

Q:Implement an algorithm to find the nth to last element of a singly  linked list .

题目:找出链表的倒数第n个节点元素。

解答:


方法一:利用两个指针p,q,首先将q往链表尾部移动n位,然后再将p、q一起往后移,那么当q达到链表尾部时,p即指向链表的倒数第n个节点。

node* find_nth_to_last(node* head,int n){    if(head==NULL || n<1)        return NULL;    node*p,*q;    p=q=head;    while(q!=NULL && n--){        q=q->next;    }    if(n>=0)        return NULL;    while(p!=NULL && q!=NULL){        p=p->next;        q=q->next;    }    return p;}    

方法二:可以先计算出节点个数,即从头到尾遍历一次链表,得到个数m,那么倒数第n个元素也即第m-n+1个元素.与方法一是同样的思维,只是具体操作方式不同,代码略.


JAVA代码:

LinkedListNode nthToLast(LinkedListNode head, int n) {    if (head == null || n < 1) {      return null;    }    LinkedListNode p1 = head;    LinkedListNode p2 = head;    for (int j = 0; j < n - 1; ++j) { // skip n-1 steps ahead      if (p2 == null) {        return null; // not found since list size < n      }      p2 = p2.next;    }    while (p2.next != null) {      p1 = p1.next;      p2 = p2.next;      }      return p1;  }

作者:Viidiot   微信公众账号:linux-code