问题描述:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
题解:
思路:因为是有序的链表,所以只要判断相邻的节点是否相同即可:
若相同:让当前节点指向下一节点的下一个节点;
若不相同:继续遍历当前节点;
ps:因为需要取下一节点的值,所以循环判断的时候需要同时判断当前节点和下一节点是否为空,否则当下一节点为空时(当前节点为尾元素时),则会出现空指针异常。
注意:C++和C这种没有自动内存管理的需要手动释放内存!!!
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *p=head;
while(p&&p->next)
{
ListNode *nex=p->next;
if(p->val==nex->val)
{
ListNode *del=nex;
p->next=nex->next;
delete del;
}else{
p=p->next;
}
}
return head;
}
};