题目:
个人解答:
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/class Solution {public:ListNode* deleteDuplicates(ListNode* head) {ListNode* result = new ListNode();ListNode* result_head = result;ListNode* node_symbol = new ListNode(9999);int count = 0;if(head==nullptr||head->next==nullptr)return head;while(head->next!=nullptr){if(head->val != head->next->val){if(head->val!=node_symbol->val){result->next = new ListNode(head->val);result=result->next;}}node_symbol = head;head = head->next;}if(head->val!=node_symbol->val){result->next = new ListNode(head->val);result=result->next;}return result_head->next;}};
官方解答:
细节
需要注意 \textit{cur.next}cur.next 以及 \textit{cur.next.next}cur.next.next 可能为空节点,如果不加以判断,可能会产生运行错误。
代码
注意下面 \texttt{C++}C++ 代码中并没有释放被删除的链表节点以及哑节点的空间。如果在面试中遇到本题,读者需要针对这一细节与面试官进行沟通。
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (!head) {
return head;
}
ListNode* dummy = new ListNode(0, head);
ListNode* cur = dummy;
while (cur->next && cur->next->next) {
if (cur->next->val == cur->next->next->val) {
int x = cur->next->val;
while (cur->next && cur->next->val == x) {
cur->next = cur->next->next;
}
}
else {
cur = cur->next;
}
}
return dummy->next;
}
};
