题解 | #JZ76 删除链表中重复的结点#
删除链表中重复的结点
http://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
//第一次遍历存储重复值,第二次遍历删除重复值
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead) {
/* ListNode *node=pHead, *nextNode, *preNode=nullptr;
while (node) {
nextNode = node->next;
if (nextNode) {
if (node->val != nextNode->val) {
if (preNode == nullptr) pHead = preNode = node;
else {
preNode->next = node;
preNode = node;
}
} else {
while (nextNode && node->val==nextNode->val) {
node = nextNode;
nextNode = node->next;
}
if (nextNode == nullptr) {
if (preNode == nullptr) pHead = nullptr;
else preNode->next = nullptr;
}
}
}
node = nextNode;
if (node && node->next==nullptr) {
if (preNode==nullptr) {
pHead = node;
} else {
preNode->next = node;
}
}
} */
set<int> delVals;
ListNode *node, *preNode;
for (node=pHead, preNode=nullptr; node; node = node->next) {
if (!preNode) preNode = node;
else if (preNode->val == node->val)
delVals.insert(node->val);
preNode = node;
}
for (node=pHead, preNode=nullptr; node; node = node->next) {
if (!delVals.count(node->val)) {
if (!preNode) preNode = pHead = node;
else preNode = preNode->next = node;
} else if (node->next == nullptr && preNode) {
preNode->next = nullptr;
}
}
if (!preNode) pHead = nullptr;
return pHead;
}
};
SHEIN希音公司福利 370人发布