①英文题目
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就不会越界。
知识兔