Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
题目大意:给出一个排好序的链表,去掉里面的重复元素。
解题思路:遍历链表,如果某一结点的值与下一结点的值相同,那么就删除下一结点。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
if(!head) return NULL;
if(!head->next) return head;
for(struct ListNode* now = head, * nxt = now->next;nxt;){
if(now->val == nxt->val){
struct ListNode* tmp = nxt;
nxt = nxt->next;
now->next = nxt;
free(tmp);
}else{
now = nxt;
nxt = nxt->next;
}
}
return head;
}