题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
#include <cstddef> #include <iostream> using namespace std; typedef struct node{ int value; struct node *next; }node,*linkList; void insertNode(linkList T, int former, int latter){ linkList p = T->next; bool hasFormerNode = false; while(p){ if(p->value==former) hasFormerNode = true; if(p->value == latter) hasFormerNode = false; p=p->next;//bug1:忘记写这一句了,直接死循环。。。 } if(hasFormerNode){ linkList p1 = T->next; while(p1->value!=former) p1 = p1->next; linkList temp = (linkList)malloc(sizeof(node)); temp->value = latter; temp->next = p1->next; p1->next = temp; }else{ linkList p2 = T; while (p2->next->value!=latter) { p2=p2->next; } linkList temp = (linkList)malloc(sizeof(node)); temp->value = former; temp->next= p2->next; p2->next = temp; } } void deleteNode(linkList T, int deleteVal){ linkList p = T; while(p->next->value!=deleteVal) p=p->next; linkList temp = p->next; p->next = temp->next; free(temp); } int main() { int n,firstVal,DeleteVal; linkList p = (linkList)malloc(sizeof(node)); cin>>n >> firstVal; p->next = (linkList)malloc(sizeof(node)); p->next->value = firstVal; p->next->next= NULL; for(int i = 0; i < n-1; i++){//bug2:最开始以为<n,审题清楚一点,就免去了调试bug的时间 int former,latter; cin>>latter>>former; insertNode(p, former, latter); } cin>>DeleteVal; deleteNode(p,DeleteVal); p=p->next; while(p){ cout<<p->value<<" "; p= p->next; } } // 64 位输出请用 printf("%lld")