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

#include <bits/stdc++.h>

using namespace std;

struct ListNode{
    int val;
    ListNode* next;
    ListNode() : val(0), next(nullptr){};
    ListNode(int x) : val(x), next(nullptr){};
};

int main(){
    int nodeNum = 0;
    int headVal = 0;
    while(cin >> nodeNum >> headVal){
        /*//法一:用数组模拟链表
        vector<int> array;
        array.push_back(headVal);
        for(int i = 1; i < nodeNum; i++){
            int num = 0, posNum = 0;
            cin >> num >> posNum; //输入要插入的数和它要插入哪个数字后面
            auto iter = find(array.begin(), array.end(), posNum); //找到要插入数字后面的那个位置
            if(iter == array.end()){
                array.push_back(num); //结尾
            }
            else{
                array.insert(iter + 1, num); //iter + 1
            }
        }
        //移除数字
        int removeNum = 0;
        cin >> removeNum;
        auto it = find(array.begin(), array.end(), removeNum); //找到要移除的数字的位置
        array.erase(it); //移除
        
        for(int i = 0; i < array.size(); i++){
            cout << array[i] << " ";//输出
        }            
        cout << endl;*/
        
        //法二:构建链表
        ListNode* head = new ListNode(headVal); //头结点
        for(int i = 1; i < nodeNum; i++){
            int preNodeNum = 0, curNodeNum = 0;
            cin >> curNodeNum >> preNodeNum;
            ListNode* curNode = new ListNode(curNodeNum); //添加这个结点
            
            ListNode* cur = head;
            while(cur != nullptr && cur->val != preNodeNum){ //找到前序结点
                cur = cur->next;
            }
            //插入节点
            curNode->next = cur->next;
            cur->next = curNode;
        }
        //移除数字
        int removeNum = 0;
        cin >> removeNum;
        ListNode* cur = head;
        /*while(cur != nullptr){
            if(cur->val != removeNum) { //不输出removeNum,其他都输出            
                cout << cur->val << " ";
            }
            cur = cur->next;
        }
        cout << endl;*/
        while(cur->next != nullptr && cur->next->val != removeNum){ //找到要移除的结点
           cur = cur->next;
        }     
        
        //移除节点
        ListNode* tmp = cur->next;
        cur->next = cur->next->next;
        delete tmp;
        
        ListNode* output = head;
        while(output != nullptr){
            cout << output->val << " ";//输出
            output = output->next;
        }            
        cout << endl;
    }
    
    return 0;
}
全部评论

相关推荐

起名字真难233:人家只有找猴子的预算,来个齐天大圣他们驾驭不住呀😂😂
点赞 评论 收藏
分享
02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务