删除有序链表中相同的元素ii

今天写了关于删除有序链表中相同元素的链表题目,自己在算法设计方面确实是很薄弱,算法思路都没有就开始动笔,肯定结果很糟糕,还有一个就是近期是以刷题为主,而且刷题主要是要多多参考别人优秀成熟的代码。

这道题题目很简单,难点在思路和细节上面

思路就是用st指向所有相同数的前一个节点,用指针p来实现遍历,找到所有相同节点以后,用st指向相同节点的后一个节点。

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        if(head==NULL) return head;
         ListNode *dummy=new ListNode(-1),*p=dummy,*st=NULL;   //dummy指针方便操作,便于比较head和head->next;
         dummy->next=head;
         int t=0;
         while(p->next&&p->next->next){
             if(p->next->val==p->next->next->val){
                 if(t==0)  st=p;
                 t=1;
                 p=p->next;}
             else if(t){
             t=0;
             st->next=p->next->next;
             p=st;}                                            //注意此时p指针的指向
             else
             p=p->next;
         }
         if(p->next->next==NULL&&t) st->next=NULL;
         return dummy->next;
    }
};

还有其他几种方法,明天再看。

原文地址:https://www.cnblogs.com/aaamax/p/12556220.html

时间: 2024-10-13 04:55:01

删除有序链表中相同的元素ii的相关文章

Leetcode(无重复字符的最长子串;删除排序链表中的重复元素II;加一;最后一个单词的长度;相同的树)

1.无重复字符的最长子串 这题需要用到滑动窗口法,有许多问题都可以考虑使用滑动窗口法:https://www.geeksforgeeks.org/tag/sliding-window/ 因为用c++,所以用到set容器:std::count 2.删除排序链表中的重复元素II 3.加一 1 class Solution { 2 public: 3 vector<int> plusOne(vector<int>& digits) { 4 int n=digits.size()-

【LeetCode链表】删除排序链表中的重复元素 II

题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 题目链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/ 做这题之前,可以先做删除排序链表中的重复元素,题解. 思路 这题是<剑指Offer>上的一道题.我们需要保存3个指针:

删除排序链表中的重复元素II --链表

题目 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例1 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例2 输入: 1->1->1->2->3 输出: 2->3 思路 新建新链表,创建newHead以及newCurrent分别是新链表的头部节点以及记录新链表当前值 创建原链表pre指向虚拟头节点,以及current记录当前访问的值还有nextCurrent

LeetCode 82. 删除排序链表中的重复元素 II(Remove Duplicates from Sorted List II)

题目描述 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1->2->5 示例 2: 输入: 1->1->1->2->3 输出: 2->3 解题思路 由于重复的节点要全部删掉,所以再删除时要先保存重复节点的前一个节点,注意特殊情况是链表的开头就是重复节点,所以应首先找到链表从左往右第一个不重复的节点作为头节点,若头节点不为

leetcode 82. 删除排序链表中的重复元素 II

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2: 输入: 1->1->1->2->3输出: 2->3 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii著作权归领扣网络所有.商

删除有序链表中重复的元素

比如 1->2->2->3,删除重复后,变为1->3. void delDup(Node* head) { Node node; node.next = head; Node* n1, n2; n1 = node; n2 = node->next; int data; while (n2) { data = n2->data; n2 = n2->next; if (n2 && n2->data == data) { n2 = n2->n

leetcode83,删除有序链表中的重复元素

Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. 难点就一个,就是要考虑到连续3个和3个以上的情况. /** * Definition for singly-linke

*** 82 删除排序链表中的重复元素II

ListNode *deleteDuplicates(ListNode *head) { if (head == nullptr || head->next == nullptr) return head; ListNode prehead(-1); prehead.next = head; head = &prehead; ListNode *left, *right; while (head->next) { left = head->next; right = left;

剑指offer 56.删除有序链表中的重复结点

56. 删除有序链表中的重复结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 分析 借助辅助头结点,可避免单独讨论头结点的情况.设置两个结点 pre 和 cur,当 cur 和 cur.next 值相等,cur 一直向前走,直到不等退出循环,这时候 cur 指的值还是重复值,调整 cur 和 pre 的指针再次判断 /*