题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
代码:
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 }; 9 */ 10 class Solution { 11 public: 12 ListNode* deleteDuplication(ListNode* pHead) 13 { 14 if(pHead == NULL) return NULL; 15 ListNode* cur = pHead; 16 ListNode* pre = NULL; 17 ListNode* back = NULL; 18 while(cur != NULL){ 19 if(cur->next != NULL && cur->val == cur->next->val){ 20 back = cur->next; 21 while(back != NULL && cur->val == back->val) 22 back = back->next; 23 cur = back; 24 if(pre == NULL) 25 pHead = cur; 26 else 27 pre->next = cur; 28 } 29 else if( cur->next != NULL){ 30 pre = cur; 31 cur = cur->next; 32 } 33 else break; 34 } 35 return pHead; 36 } 37 };
我的笔记:
- 首先添加一个头节点,以方便碰到第一个,第二个节点就相同的情况
- 设置 pre ,back 指针, pre指针指向当前确定不重复的那个节点,而 back 指针相当于工作指针,一直往后面搜索。