题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
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")