题目:
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
示例1:
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
示例2:
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
提示:
链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。
进阶:
如果不得使用临时缓冲区,该怎么解决?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
结果:
解题思路:
1,p指向比较的原始数据
2,temp指向正在比较的前一个节点,用于删除节点后链接链表。
3,q指向正在比较的节点,如果和p指向的数据相同则删除节点,继续判断下一个,如果不相等则和temp一起往下移动
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeDuplicateNodes(struct ListNode* head){
struct ListNode *p, *q, *temp;
p = head;
while(p)
{
q = p->next;
temp = p;
while(q)
{
if(q->val == p->val)
{
temp->next = q->next;
free(q);
q = temp->next;
}
else
{
temp = q;
q = q->next;
}
}
p = p->next;
}
return head;
}