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

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

https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f

//都是链表基本操作,记录一下
//创建链表结构
//链表插入:listnode->next = listtmp->next; listtmp->next = listnode;
//链表删除: listtmp->next = listtmp->next->next;//这里有内存泄漏
//删除的话代码里为了保留我的憨批写法所以没动,这里记录一下正确的删除方法吧:
//其实就是把要删除的点记录一下,next跳过它之后再删掉:
//ListNode* listhelp = listtmp->next;listtmp->next = listtmp->next->next; delete listhelp;

#include<iostream>
using namespace std;
class ListNode{
public:
    ListNode* next = nullptr;
    int val;
};
int main(){
    int N,headval;
    cin >> N >> headval;
    ListNode* head = new ListNode;
    head->val = headval;
    for(int i = 0;i<N-1;++i){
        int start,end;
        cin >> end >> start;
        ListNode* listnode = new ListNode;
        listnode->val = end;
        //遍历当前链表,找到start的节点
        ListNode* listtmp = head;
        while(listtmp != nullptr){
            if(listtmp->val == start){
                listnode->next = listtmp->next;
                listtmp->next = listnode;
                break;
            }
            listtmp = listtmp->next;
        }
    }
    //删除节点
    int deletenode;
    cin >> deletenode;
    ListNode* listtmp = head;
    while(listtmp->next != nullptr){
        if(listtmp->next->val == deletenode){
            listtmp->next = listtmp->next->next;//这里有内存泄漏
            break;
        }
        listtmp = listtmp->next;
    }
    while(head!= nullptr){
        cout << head->val << " ";
        head = head->next;
    }
    cout << endl;
    return 0;
}
全部评论

相关推荐

牛客21331815...:像我一投就pass,根本不用焦虑泡池子
点赞 评论 收藏
分享
用微笑面对困难:只要你保证项目和获奖都是真的就行尤其是“对战,总负责人”啊这些套职,基本上队员,打杂的都这么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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