题目
Number: 82
Difficulty: Medium
Tags: Linked List
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
.
题解
在排序的链表中删除重复的结点,只留下不同的结点。
代码
ListNode* deleteDuplicates(ListNode* head) {
if(!head || !head->next)
return head;
int val = head->val;
ListNode* p = head->next;
if(p->val != val){
head->next = deleteDuplicates(p);
return head;
}
else{
while(p && p->val == val)
p = p->next;
return deleteDuplicates(p);
}
}
使用指针的指针解决链表问题:
ListNode* deleteDuplicates(ListNode* head) {
ListNode **runner = &head;
if(!head || !head->next) return head;
while(*runner){
if((*runner)->next && (*runner)->next->val == (*runner)->val){
ListNode *temp = *runner;
while(temp && (*runner)->val == temp->val)
temp = temp->next;
*runner = temp;
}
else
runner = &((*runner)->next);
}
return head;
}