【javacript日刷算法第三天】删除排序链表中的重复元素

205 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目

给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。

示例:

list1.jpg

输入: head = [1,1,2]
输出: [1,2]

list2.jpg

输入: head = [1,1,2,3,3]
输出: [1,2,3]

提示:

  • 链表中节点数目在范围 [0, 300] 内
  • -100 <= Node.val <= 100
  • 题目数据保证链表已经按升序 排列

题解

var deleteDuplicates = function(head) {
    if(!head) return head ;
    let cur = head;
    while(cur.next){
        if(cur.val === cur.next.val){
            cur.next = cur.next.next;
        }
        else cur = cur.next
        
    }
    return head;
};

IMG_20220314_121453_edit_20093003392958.jpg (1)链表的由一个结点或多个结点组成,结点由两部分组成:一个是存储数据元素的数据域(val),另一个是存储下一个结点地址的指针域(next)。

(2)当后面的数值与前面的数值相同时,就将前面结点的指针指向后面的后面。

(3)当前面的结点和后面的结点不相同时,将当前要检测的结点后移一位即 cur = cur.next

JAVA写法

class Solution 
{ 
    public ListNode deleteDuplicates(ListNode head) { 
        if (head == null) { 
            return head; 
        }
        ListNode cur = head;
        while (cur.next != null) { 
            if (cur.val == cur.next.val) { 
            cur.next = cur.next.next; 
            } 
            else { 
                cur = cur.next; 
            } 
        } 
        return head; 
    } 
 }

python写法:

class Solution: 
    def deleteDuplicates(self, head: ListNode) -> ListNode: 
        if not head: 
            return head cur = head 
        while cur.next: 
            if cur.val == cur.next.val: 
                cur.next = cur.next.next 
            else: 
                cur = cur.next 
        return head