我必须解决一个简单的问题,即已为我提供了链表的头节点,并且我必须将指针返回到最后一个节点。
这是两个实现:
这是行不通的(我尝试过leetcode和geekforgeeks),它导致了SEGMENTATION FAULT:
node* traversal(node* head){
node* temp=head;
while(temp!=NULL) temp=temp->next;
return temp;
}
这个很好用:
node* traversal(node* head){
node *tail,*temp=head;
while(temp!=NULL){
tail=temp;
temp=temp->next;
}
return tail;
}
请告诉我第一个代码有什么问题,因为根据我的说法,两个代码是相同的。...但是第一个代码始终会给出SEGMENTATION FAULT
答案 0 :(得分:2)
第一个代码块中的问题是:中断循环的力矩循环将指向NULL,并且将返回相同的指针,即指向最后一个节点的指针。
当循环迭代器(即temp移到最后一个节点的下一个节点,这意味着temp的值为NULL值然后返回函数)时,需要使用一个引用指针来存储最后一个节点的引用。
为了解析这两个变量,将需要获取链接列表的最后一个节点:
node *tail; // to assign the reference
node *next = head; // to iterate through the link list.
答案 1 :(得分:1)
第一种情况下要检查的条件需要修改
node* traversal(node* head){
node* temp=head;
//when next node is null, that means this is the last node
//break out of the while loop when you are at last node
while(temp->next !=NULL){
temp=temp->next;
}
//Return the pointer to the last node
return temp;
}
根据您的原始代码,您将有temp
指向null,当您尝试从调用函数取消引用时,它将返回SEGMENTATION FAULT
。