从链表中的最后一个元素中有效地找到第n个

时间:2016-11-21 16:01:33

标签: data-structures linked-list

从单个/双向链表中的最后一个元素中找到第n个的有效方法是什么?

1 个答案:

答案 0 :(得分:0)

这是从链接列表中的最后一个元素中找到第n个的有效方法。

struct Node{
    int data;
    struct Node *next;
};

int getNthFromLast(struct Node *head, int n){
    struct Node *curr = head;
    struct Node *nthFromLast=NULL;
    int count=0;
    int value=-1;
    while(curr!=NULL){
        count++;
        curr=curr->next;
        if(count==n){
            nthFromLast=head;
        }else
            if(count>n){
                nthFromLast=nthFromLast->next;
            }
    }
    if(count>=n){
        value=nthFromLast->data;
    }
    return value;
}

此示例使用C ++编写,可以在其他语言中进行类似的复制。该方法传递一个指向链表的第一个节点的指针和来自最后一个元素的索引,该数据返回它的数据。如果该位置不存在,则该方法返回-1。

对于双向链表和循环链表,可以采用类似的方法。

编辑:如果是双向链接列表,只需反向移动n个项目。完全忘记了这一点。致谢:Jim Mischel