1.题目
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。
返回同样按升序排列的结果链表。
示例 1:
输入: head = [1,1,2]
输出: [1,2]
示例 2:
输入: head = [1,1,2,3,3]
输出: [1,2,3]
提示:
- 链表中节点数目在范围 [0, 300] 内
- -100 <= Node.val <= 100
- 题目数据保证链表已经按升序排列
2.答题
2.1 思路
链表的基本操作,快慢指针,如果快指针==慢指针,慢指针删掉next,如果快指针!=慢指针,同时后移。
注意边界条件即可
代码如下:
class Solution {
public int climbStairs(int n) {
if (head == null) {
return head;
}
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode slow = dummy.next;
ListNode fast = slow.next;
while(fast != null) {
if (slow.val == fast.val) {
slow.next = fast.next;
fast = fast.next;
} else {
slow = slow.next;
fast = fast.next;
}
}
return dummy.next;
}
}
时间复杂度
使用了一次循环,即为O(n)
空间复杂度
常量空间复杂度:O(1)