我有一个链接列表说,
10 => 16 => 9 => 6 => 4 => 11 => 18 => 17 => 7 => 8 => 8 =>

我没有给出(N)个节点。

我想使用单次通过从链接列表中获取倒数第三个元素。
我想要C代码。请帮我。

最佳答案

由于操作已经“搞定了”,因此请注意,仅可以使用指向节点的单个指针:

node *thirdtolast(node * list){
    node *pnode = list;
    if(pnode == NULL || pnode->next == NULL || pnode->next->next == NULL)
        return pnode;
    while(pnode->next->next->next != NULL)
        pnode = pnode->next;
    return pnode;
}


使用两个指针将更通用,更有效:

node *thirdtolast(node * list){
    node *pend = list;
    node *pnode = list;
    int i;
    for(i = 0; i < 3; i++){
        if(pend == NULL)
            return list;
        pend = pend->next;
    }
    while(pend != NULL){
        pend  = pend->next;
        pnode = pnode->next;
    }
    return pnode;
}

09-12 12:24