C 语言链表删除节点代码比较:for 循环 vs while 循环
这两段代码的不同之处在于遍历链表的方式和更新指针的方式。
第一段代码使用了 for 循环来遍历链表,条件是 'pos->next != p',即当遍历到 p 的前一个节点时停止。在每一次循环中,将 'pos->next' 指向 'p->next',表示将 p 从链表中删除。最后释放 p 指向的空间,并返回 'pos->next'。
'node list_del(nodep) { node *pos; for(pos=p;pos->next!=p;pos=pos->next) pos->next=p->next; free(p); return pos->next; } '
第二段代码使用了 while 循环来遍历链表,条件是 'prev->next != p',即当遍历到 p 的前一个节点时停止。在每一次循环中,将 'prev' 指向 'prev->next',直到找到 p 的前一个节点。然后将 'prev->next' 指向 'p->next',表示将 p 从链表中删除。最后释放 p 指向的空间,并返回 'prev->next'。
'node *list_del(node *p) { node *prev = p; while (prev->next != p) { prev = prev->next; } prev->next = p->next; free(p); return prev->next; } '
总结起来,两者的不同之处在于遍历链表的方式,第一段代码使用了 for 循环,第二段代码使用了 while 循环;更新指针的方式也不同,第一段代码直接将 'pos->next' 指向 'p->next',第二段代码将 'prev->next' 指向 'p->next'。
原文地址: https://www.cveoy.top/t/topic/qiq9 著作权归作者所有。请勿转载和采集!