题目描述:
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5
输出: 1->2->5
示例 2:
输入: 1->1->1->2->3
输出: 2->3
题目解答:
方法1:三指针遍历
利用三个指针head,t1,t2,其关系为head->next = t1, t1->next = t2。每次判断t1和t2值的情况,并进行标记。如果相等,则标记,并删除t1节点,更新指针;不等时标记为真,则也需要删除t1节点,因为之前有和t1相同的数字,并更新指针;其它则直接更新三个指针。
运行时间0ms,代码如下。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
if(head == NULL || head->next == NULL)
return head;
struct ListNode* front = (struct ListNode*)malloc(sizeof(struct ListNode));
front->next = head;
struct ListNode *t1 = head, *t2 = head->next;
head = front;
bool flag = false;
while(t2) {
if(t1->val == t2->val) {
flag = true;
head->next = t2;
}
else if(flag) {
flag = false;
head->next = t2;
}
else
head = t1;
t1 = t2;
t2 = t2->next;
}
if(flag) {
head->next = NULL;
}
free(front);
t1 = front->next;
return t1;
}

本文介绍了一种使用三指针法删除排序链表中重复数字节点的方法,通过示例展示了如何仅保留链表中未重复的数字,提供了一段运行时间为0ms的高效代码。
&spm=1001.2101.3001.5002&articleId=85726979&d=1&t=3&u=d5ab34c06d494f15af629560b82f2a3a)
480

被折叠的 条评论
为什么被折叠?



