给定一个已排序的链表的头 head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例 1:
输入:head = [1,2,3,3,4,4,5] 输出:[1,2,5]
示例 2:
输入:head = [1,1,1,2,3] 输出:[2,3]
提示:
- 链表中节点数目在范围
[0, 300]
内 -100 <= Node.val <= 100
- 题目数据保证链表已经按升序 排列
实战:
struct ListNode* deleteDuplicates(struct ListNode* head) { struct ListNode* dummy = malloc(sizeof(struct ListNode)); dummy->next = head; struct ListNode* node=dummy; if (head==NULL)return NULL; while (node->next&&node->next->next){ if (node->next->val==node->next->next->val){ node->next=node->next->next; int x = node->next->val; while (node->next && node->next->val == x) { node->next = node->next->next; } } else{ node=node->next; } } return dummy->next; }
详解:
可以通过确认后俩位是否相同,之后在进行依次判断,但由于可能出现首位相同,所以需要再建一个链表设定一个首部空节点,之后进行依次确认让后俩位比对,之后在进行依次比对。得到答案。