题解 | #删除链表中重复的结点#

删除链表中重复的结点

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


/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
  public:
    ListNode* deleteDuplication(ListNode* pHead) {
        if (pHead == nullptr) {
            return nullptr;
        }
        ListNode* ans = new ListNode(0);
        ans->next = pHead;
        ListNode* cur = ans;
        while (cur->next != NULL && cur->next->next != NULL) {
            if (cur->next->val == cur->next->next->val) {
                int temp = cur->next->val;
                //使用 while 循环遍历链表,检查当前节点的下一个和下下个节点是否存在,确保后续访问不会越界。
                while (cur->next != NULL && cur->next->val == temp) {
                    cur->next = cur->next->next;
                } 
            }
            else
                cur = cur->next;
        }
        return ans->next;
    }
};

本来想的是用两个指针,但是实际上用一个还比较方便,还是要深刻认识ans->next 和ans->next->next,以及代码中关键的用一个while循环来删除重复的数字

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 14:10
啊啊啊啊好幸福,妈妈是我找工作发疯前的一束光
黑皮白袜臭脚体育生:看了这篇帖子之后已经第一百次质问老妈,仍然没有得到我的老妈是老板的回答
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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