题意:删掉单链表里重复的节点,如:
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
思路:真的真的是很简单的题啊,但是有个陷阱,也怪自己练的太少,都忘记了这个。思路其实就是判断如果p->val == p->next->val就删掉p->next节点,如果新的p->next的值与p的值不相等则往后移动。这里的判断条件有两个,
一个是p->val != p->next->val,一个是p->next != NULL。
代码:
ListNode* deleteDuplicates(ListNode* head) { ListNode* p = head; if(head == NULL || head->next == NULL) return head; while(p->next != NULL) { if(p->val == p->next->val) { ListNode* temp = p->next; p->next = p->next->next; free(temp); } if(p->next != NULL && p->val != p->next->val) { p = p->next; } } return head; }