题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ struct ListNode* deleteDuplicates(struct ListNode* head ) { // write code here struct ListNode* temp = NULL; struct ListNode* last = temp; //新链表的初始化 struct ListNode* p = head; struct ListNode* q = NULL; if (head == NULL || head->next == NULL) //特殊情况 return head; q = p; p = p->next; int data; while (p) { if (q->val == p->val) //相同时 { while (1) { if (p->val != q->val) { q->next = NULL; q = p; p = p->next; if (p == NULL) //当最后一个结点为不同时出现的情况 { if (temp == NULL) { temp = q; last = q; } else { last->next = q; last = q; } } break; } else { q = p; p = p->next; if (p == NULL) //q跟随p结点直至p为空时,它们依旧相等的情况 break; } } } else //不同时 { q->next = NULL; if (temp == NULL) { temp = q; last = q; } else { last->next = q; last = q; } q = p; p = p->next; if (p == NULL) { last->next = q; last = q; } } } return temp; }