每日一题(1)——数据结构(LeetCode)

题目

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。 示例1:

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

示例2:

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

代码

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

解题思路

这道题和上篇博客中的有一道很类似,而且要难,就是将所有重复的元素都删除,那么这个就相对简单一些了,如何解决呢?举个例子: 假设我们有这样一个链表,我们先实例化一个节点cur指向head,在实例化一个节点curNext指向cur的下一个节点也就是0x234这个节点。 当curNext不为null时,进入循环,如果cur的val值与curNext的val值相同,那么将curNext的next值赋值给cur的next值,这样curNext所在的节点就和链表截断了也就是0x234,并且curNext往后移动一个节点。 此时在比较cur的val值与curNext的val值,发现并不相等,那么cur往后移动一个节点,同样curNext往后移动一个节点,如此循环下去,直到curNext为null值循环跳出,最后返回head,问题解决。当然不能忘了,当head为null时,返回null。 每日LeetCode是新的博客形式,主要是为了分享我自己的解题思路,当然还有提升自己的编程能力,不出意外会一直进行下去,不过最近可能会忙着学校的复习如果缺了几天还望见谅,谢谢各位!附上该题目的链接地址! 附:

经验分享 程序员 微信小程序 职场和发展