AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
    • 吐槽
  • App
  • 登录/注册

手撕代码锻炼 83. 删除排序链表中的重复元素

作者: 作者的头像   liweidong ,  2023-03-19 22:01:28 ,  所有人可见 ,  阅读 34


0



/*
 * 遍历每个节点
 * 如果值和上一个节点一样,删除该节点
 * 需要存储上一个值,存储上一个指针
 */
#include <iostream>
#include <vector>
using namespace std;

struct Node{
    int val;
    Node* next;
    Node(int _val = -1): val(_val), next(nullptr){}
};

Node* deleteRepeatedNode(Node* head){
    Node* p = head;
    Node* q = head;

    int last = INT_MAX;
    // 遍历每个节点
    while(p){
        // 和上一个节点的值相同,删除本节点
        if(p->val == last){
            q->next = p->next;
            delete p;
            p = q->next;
            continue;
        }
        // 若值不相同
        last = p->val;
        q = p;
        p = p->next;
    }
    return head;
}

int main(){

    // 构造链表
    vector<int> nums{1,1,2};
    Node* dummy = new Node;
    Node* p = dummy;
    for(int x : nums){
        p->next = new Node(x);
        p = p->next;
    }
    Node* head = dummy->next;
    delete dummy;

    Node* res = deleteRepeatedNode(head);

    // 打印
    p = res;
    while(p){
        cout<<p->val<<" ";
        p = p->next;
    }
    cout<<endl;

    return 0;
}

0 评论

你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息