Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
Subscribe to see which companies asked this question
解答:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteDuplicates(struct ListNode* head) { struct ListNode *pre_node, *this_node, *tmp_head; int tmp; while(NULL != head&&NULL != head->next){ this_node = head->next; tmp = head->val; while(NULL != this_node){ if(this_node->val == tmp){ this_node = this_node->next; } else{ break; } } if(head->next != this_node) head = this_node; else break; } if(NULL == head||NULL == head->next) return head; tmp_head = head; pre_node = head; while(NULL != pre_node){ head = pre_node->next; while(NULL != head&&NULL != head->next){ this_node = head->next; tmp = head->val; while(NULL != this_node){ if(this_node->val == tmp){ this_node = this_node->next; } else{ break; } } if(head->next != this_node) head = this_node; else break; } pre_node->next = head; if(NULL == pre_node) break; pre_node = pre_node->next; } return tmp_head; }
时间: 2024-10-05 23:37:30