①英文题目
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2 Output: 1->2
Example 2:
Input: 1->1->2->3->3 Output: 1->2->3
②中文题目
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
③思路
很简单,这次我是1次写,就通过了。
因为这个题是,删除重复的元素,让它只出现1次,不像剑指offer里那个变态删除题要求把重复的全删了,1个不留,所以这个题简单。
直接遍历,将当前结点的元素curr.val与下一个结点的元素curr.next.val比较,
④代码
1 class Solution { 2 public ListNode deleteDuplicates(ListNode head) { 3 if(head==null||head.next==null) 4 return head; 5 ListNode curr=head; 6 while(curr.next!=null){ //因为我保证了.next不为空,那么低8行我调用.next.next就不会越界。 7 if(curr.val==curr.next.val) 8 curr.next=curr.next.next; 9 else 10 curr=curr.next; 11 } 12 return head; 13 } 14 }
⑤提交结果
执行结果:
通过
显示详情
执行用时 :1 ms, 在所有 Java 提交中击败了99.86%的用户
内存消耗 :36.6 MB, 在所有 Java 提交中击败了62.77%的用户
⑥学到的知识
1、第3、4行这种逻辑或的写法,是专用写法,我见过的所有“保证链表不为空,或者保证链表不止有1个元素”的写法里,最简洁的了。学习一下,以后每次遇到,都这样写。
2、因为我第6行保证了.next不为空,那么低8行我调用.next.next就不会越界。