题解 | #从单向链表中删除指定值的节点#

从单向链表中删除指定值的节点

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")

全部评论

相关推荐

这是什么操作什么意思,这公司我服了...
斯派克spark:意思是有比你更便宜的牛马了
点赞 评论 收藏
分享
求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务