题目:

个人解答:
/*** 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(0,head);ListNode* cur = result;if(!head)return head;while(cur->next&&cur->next->next){if(cur->next->val==cur->next->next->val){cur->next = cur->next->next;}else{cur=cur->next;}}if(cur->next&&cur->val!=cur->next->val)cur = cur->next;return result->next;}};
官方解答:
细节
当我们遍历到链表的最后一个节点时, 为空节点,如果不加以判断,访问
对应的元素会产生运行错误。因此我们只需要遍历到链表的最后一个节点,而不需要遍历完整个链表。
代码
注意下面代码中并没有释放被删除的链表节点的空间。如果在面试中遇到本题,读者需要针对这一细节与面试官进行沟通。
class Solution {public:ListNode* deleteDuplicates(ListNode* head) {if (!head) {return head;}ListNode* cur = head;while (cur->next) {if (cur->val == cur->next->val) {cur->next = cur->next->next;}else {cur = cur->next;}}return head;}};

