【Leetcode】面试题 02.01. 移除重复节点
题目
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
思路
双指针:暴力解法,使用两重循环进行搜索,遇到相同的节点值 直接删除
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* removeDuplicateNodes(ListNode* head) {
if(!head || !head->next)
{
return head;
}
ListNode *p = head;// 工作指针
// 第一重循环
while(p)
{
// 第二重循环
ListNode *k = p->next;// 当前指针
ListNode *pre = p;// 前驱指针
while(k != NULL)
{
if(k->val == p->val)
{
// 如果值相同 直接删除
pre->next = k->next;
// 因为后续还有元素相同
k = k->next;
}
else
{
// 不相同 两个指针向下移动
pre = k;
k = k->next;
}
}
p = p->next;
}
return head;
}
};