剑指Offer——删除链表中重复的结点
2017-11-03 11:08
323 查看
题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
分析:
因为已经排好序了,所以如果相邻的数值一样的话,那么就跳过该数值,不过要记录前一结点的指针,将其next指向后一个没有重复的结点。
代码:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
分析:
因为已经排好序了,所以如果相邻的数值一样的话,那么就跳过该数值,不过要记录前一结点的指针,将其next指向后一个没有重复的结点。
代码:
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 if(pHead == NULL) return NULL; 14 ListNode* phead = NULL; 15 ListNode* p1 = pHead; 16 ListNode* p2 = NULL; 17 while(p1) { 18 if(p1->next) { 19 int val = p1->val; 20 if(val == p1->next->val) { 21 while(p1->next && p1->next->val == val) p1 = p1->next; 22 } else { 23 if(phead == NULL) phead = p2 = p1; 24 else { 25 p2->next = p1; 26 p2 = p1; 27 } 28 } 29 } else { 30 if(phead == NULL) phead = p2 = p1; 31 else { 32 p2->next = p1; 33 p2 = p1; 34 } 35 } 36 if(p1 == NULL) break; 37 p1 = p1->next; 38 } 39 if(p2) p2->next = NULL; 40 return phead; 41 } 42 };
相关文章推荐
- 剑指Offer——删除链表中重复的结点
- 剑指offer——删除链表中重复的结点
- 剑指offer—删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 剑指Offer-删除链表中重复的结点-java
- 【剑指Offer】面试题57:删除链表中重复的结点
- 【剑指Offer】面试题57:删除链表中重复的结点
- 剑指offer_链表---删除链表中重复的结点
- 【剑指Offer学习】【面试题57:删除链表中重复的结点】
- 剑指Offer_56_删除链表中重复的结点
- 【剑指offer】题57:删除链表中的重复的结点
- 剑指offer57 删除链表中重复的结点
- 剑指offer 面试题57 删除链表中重复的结点
- 牛客网剑指offer-删除链表中重复的结点
- 剑指Offer--057-删除链表中重复的结点
- 剑指offer面试题[57]-删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- 剑指offer | 训练题55:删除链表中重复的结点
- 剑指offer--删除链表中重复的结点