首页 > 代码库 > 56、剑指offer--删除链表中重复的结点
56、剑指offer--删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题思路:从头遍历整个链表,如果当前结点和下一结点值相同,则应当删除。为了保证结点不断,需要保存pre结点,然后找到不相等的next,pre->next = 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 { 14 if(pHead == NULL) 15 return NULL; 16 ListNode *pPreNode = NULL; 17 ListNode *pNode = pHead; 18 while(pNode != NULL) 19 { 20 ListNode *pNext = pNode->next; 21 bool needDelete = false; 22 if(pNext != NULL && pNext->val == pNode->val) 23 needDelete = true; 24 if(!needDelete)//不等 25 { 26 pPreNode = pNode; 27 pNode = pNode->next; 28 } 29 else//相等该删除 30 { 31 int value = http://www.mamicode.com/pNode->val; 32 ListNode *pToBeDel = pNode; 33 while(pToBeDel != NULL && pToBeDel->val == value) 34 { 35 pNext = pToBeDel->next; 36 delete pToBeDel; 37 pToBeDel = NULL; 38 pToBeDel = pNext; 39 } 40 if(pPreNode == NULL)//头结点被删除了 41 pHead = pNext; 42 else 43 pPreNode->next = pNext; 44 pNode = pNext; 45 46 } 47 } 48 return pHead; 49 } 50 };
56、剑指offer--删除链表中重复的结点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。