版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsszwc/article/details/87890773
题目:
https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/submissions/
题意:
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
思路:
两种思路:
- 以当前节点为基准,不断删除值相等的后继节点
- 如果当前节点与后继节点值相等,删除当前节点
一般来说,第一种写法更凝练更精彩,因为第二种写法需要前驱节点
代码:
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode *curNode = head;
while(curNode) {
while(curNode->next && curNode->next->val == curNode->val) {
curNode->next = curNode->next->next;
}
curNode = curNode->next;
}
return head;
}
};
/**
* 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) {
if(head == nullptr) {
return head;
}
ListNode *dummy = new ListNode(0);
dummy->next = head;
ListNode *prevNode = dummy, *curNode = head;
while(curNode->next) {
if(curNode->val == curNode->next->val) {
prevNode->next = curNode->next;
curNode = curNode->next;
} else {
prevNode = curNode;
curNode = curNode->next;
}
}
return dummy->next;
}
};