Day14 2023/03/14
难度:简单
题目
给定一个已排序的链表的头heād,删除所有重复的元素使每个元素只出现一次。返回已排序 的链表。
提示: 链表中节点数目在范围(0,300)内
-100<=Node.va<=100
题目数据保证链表已经按升序排列
示例
输入:head = [1, 1, 2]
输出:[1,2]
复制代码
思路
因为链表已经排序,就可以直接用一个变量存储数值,然后在下个节点判断是否重复
```
public static void main(String[] args) {
ListNode l1 = new ListNode(1,new ListNode(2,new ListNode(5,new ListNode(4,null))));
l1.delete(l1);
ListNode head = l1.reverseLink(l1);
while (head != null){
System.out.println(head.data);
head = head.next;
}
}
```
class ListNode{
int data;
ListNode next;
public ListNode(int data, ListNode next) {
this.data = data;
this.next = next;
}
public ListNode delete(ListNode head){
ListNode ln = head;
int temp = ln.data;
while (ln.next != null){
if (temp == ln.next.data){
if (ln.next.next != null){
ln.next = ln.next.next;
temp = ln.next.data;
ln = ln.next;
}
else{
ln.next = null;
}
}else {
ln = ln.next;
temp = ln.data;
}
}
return head;
}
public ListNode reverseLink(ListNode head){
ListNode temp = head;
ListNode cur = head;
ListNode pre = null;
while (cur != null){
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
-
时间复杂度 O(n)--- 不考虑创建链表所占用的时间,仅遍历整个链表,其中n为链表节点个数
-
空间复杂度 O(n)---最坏情况下,该链表无重复节点,record辅助数组所占用的空间就等于链表节点个数n