题目链接:删除排序链表中的重复元素
题意:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
题解:这个的上一题是也是删除排序链表的重复元素,不过元素都删掉。。在剑指offer里也有做过。可以看链接。
这个就是在上个题的基础上做一点修改。最后更新节点时,直接指向这个重复节点的最后一个节点。而不是它的下一个。
代码:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* deleteDuplicates(ListNode* head) { 12 if(head == NULL) return head; 13 ListNode* pre = head; 14 ListNode* cur = head; 15 ListNode* nxt = head; 16 17 while(cur){ 18 //如果相同 19 if(cur->next!=NULL && cur->next->val == cur->val){ 20 nxt = cur->next; 21 //一直找到不相同的值 22 while(nxt->next!=NULL && nxt->next->val == cur->val){ 23 nxt = nxt->next; 24 } 25 //如果是头节点,这里注意保留一个元素 26 if(cur == head) head = nxt; 27 //不是头节点 28 else pre->next = nxt; 29 //更新节点 30 cur = nxt; 31 } 32 else{ //不相同直接向后走 33 pre = cur; 34 cur = cur->next; 35 } 36 } 37 38 39 return head; 40 } 41 };