我有一个链接列表说,
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;
}