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

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

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;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务