每日一题(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是新的博客形式,主要是为了分享我自己的解题思路,当然还有提升自己的编程能力,不出意外会一直进行下去,不过最近可能会忙着学校的复习如果缺了几天还望见谅,谢谢各位!附上该题目的链接地址! 附:
上一篇:
IDEA上Java项目控制台中文乱码