今天面完shoope,自己状态不是很好,当时有一道面试题,要求线上去写代码,完事后查了以下,发现试leetcode原题,题目描述如下:
思路是这样,增加一个辅助结点每次指向上一个重复的结点,代码如下。
如果大家不能理解的话,可以对着我的代码去画一遍,就非常明了了。
#include<iostream>
using namespace std;
struct headNode
{
headNode(int v = 0, headNode * n = nullptr)
{
value = v;
next = n;
}
int value;
headNode* next;
};
headNode* output(headNode*head)
{
if(head==nullptr||head->next==nullptr)
return head;
headNode dum(INT_MAX);
dum.next = head;
headNode* pre = &dum;
while (pre && pre->next)
{
headNode* cur = pre->next;
if (!cur->next || cur->next->value != cur->value)
pre = cur;
else
{
//遍历到最后
while (cur->next && cur->next->value == cur->value)
{
cur = cur->next;
}
pre->next = cur->next;
}
}
return dum.next;
}
int main()
{
headNode node1(1);
headNode node2(2);
headNode node3(2);
headNode node4(4);
headNode node5(5);
headNode node6(5);
headNode node7(5);
headNode node8(6);
headNode node9(6);
headNode node10(7);
node1.next = &node2;
node2.next = &node3;
node3.next = &node4;
node4.next = &node5;
node5.next = &node6;
node6.next = &node7;
node7.next = &node8;
node8.next = &node9;
node9.next = &node10;
headNode* temp = output(&node1);
while (temp != nullptr)
{
cout << temp->value << ends;
temp = temp->next;
}
return 0;
}