Q:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
A:题目并不难,重要的是,可以在head前添加一个头结点,放置head被删的情况。
ListNode *deleteDuplication(ListNode *pHead) {
if (pHead == nullptr || pHead->next == nullptr)
return pHead;
ListNode *node = new ListNode(0);
node->next = pHead;
pHead = node;
ListNode *temp = pHead;
while (node->next != nullptr) {
if (node->val == node->next->val) {
while (temp->next != node)
temp = temp->next;
while (node->next != nullptr && node->val == node->next->val)
node = node->next;
if (node->next == nullptr) {
temp->next = nullptr;
break;
}
temp->next = node->next;
node->next = nullptr;
node = temp->next;
} else {
node = node->next;
}
}
return pHead->next;
}