题解 | 删除链表中重复的结点
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
//三指针法,每次删除头部,利用flag做标记; 利用循环也可!
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead) {
ListNode* dummynode = new ListNode(-1);
dummynode->next = pHead;
if (pHead == nullptr) return nullptr;
ListNode* pre = dummynode;
ListNode* cur = pHead;
ListNode* nex = cur->next;
bool flag = false;
while (nex) {
ListNode* last = nex->next;
if (cur->val == nex->val) {
pre->next = nex;
cur = nex;
nex = last;
flag = true;
}
else {
if (flag) {
pre->next = nex;
cur = nex;
nex = last;
flag = !flag;
}
else {
pre = cur;
cur = nex;
nex = last;
}
}
}
if (flag) {
pre->next = nex;
}
return dummynode->next;
}
};


查看20道真题和解析