83. Remove Duplicates from Sorted List
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;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head) return head;
if(head->next == NULL) return head;
ListNode *pCurr = head;
ListNode *pNext;
while(pCurr) {
pNext = pCurr->next; // 取出下一个节点
if(pNext && pNext->val == pCurr->val) { // 如果当前节点和下一个节点相等需要删除下一个节点
pCurr->next = pNext->next; // 将当前节点的下一个节点职位下下个节点
delete pNext; // 删除当前节点
} else { // 这里是else
pCurr = pCurr->next; // 继续考察下一个节点
}
}
return head;
}
};