leetcode83. Remove Duplicates from Sorted List(删除有序链表中的重复项)

题目要求

给定一个排好顺序的链表,删除链表中的重复项。

例子

Example 1:

Input: 1->1->2
Output: 1->2

Example 2:

Input: 1->1->2->3->3
Output: 1->2->3

解题思路

和解决有序数组中删除重复元素leetcode 26 有序数删除组中的重复元素的思路相似,通过遍历比较链表中相邻元素的值,若重复,则当前元素的next指向下一节点的next.
(p->next = p->next->next) 理解起来是这样
在操作中,因为要删除并释放重复节点,所以也需要一个指针(nex)来存放记录重复节点的位置,即nex = p->next。

主要代码c++

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        ListNode *cur =head, *nex;
        while(cur && cur->next) // 链表为空,或者里那表末尾时结束(避免再写if判断空表)
        {
            if(cur->val == cur->next->val) // 比较相邻元素的值
            {
                nex = cur->next;
                delete cur->next; //很多解答直接跳到下一节点,而不释放节点
                cur->next = nex->next;
            }
            else{cur = cur->next;}
        }
        return head; 
    }
};

原题链接 :https://leetcode.com/problems/remove-duplicates-from-sorted-list/

猜你喜欢

转载自blog.csdn.net/qq_37466121/article/details/85808652