#define illegalVariable 1001 /** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * @author Senky * @date 2023.04.23 * @par url https://www.nowcoder.com/creation/manager/content/584337070?type=column&status=-1 * @param head ListNode类 * @return ListNode类 */ struct ListNode* deleteDuplicates(struct ListNode* head ) { // write code here struct ListNode* pre = NULL;//前指针 struct ListNode* cur = NULL;//现指针 int illegal[1] = {illegalVariable};//记录要处理的结点值,默认是非法值 if(head) { pre = head; illegal[0] = pre->val; cur = head->next; } /*把每个一样的结点数据域都修改成一个非法值*/ while(pre && cur) { if(cur->val != illegal[0]) { illegal[0] = cur->val;//现结点值不等于上一个结点值,现结点值录入数组 } else { /*现节点值等于上一个结点值,两个结点都设为非法*/ pre->val = illegalVariable; cur->val = illegalVariable; } pre = pre->next; cur = cur->next; } /*把非法值的节点删除*/ { struct ListNode* legal = head;//上一个合法的结点,默认头 cur = head; while(cur) { if(illegalVariable == cur->val) { if(cur == head) { head = head->next; } else { legal->next = cur->next; } } else { legal = cur; } cur = cur->next; } } return head; }