删除重复的节点

没有回收,可能会造成内存泄露

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

 

#include<fstream>
#include <vector>
#include<string>
#include<iostream>
#include <sstream>
#include <stdexcept>
using namespace std;


struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};

class Solution {
public:
	//没有回收节点,会造成内存泄露
	ListNode* deleteDuplication(ListNode* pHead)
	{
		if (pHead == NULL||pHead->next==NULL){
			return pHead;
		}
		ListNode *newHead = pHead;
		while (pHead->next)
		{
			if (pHead->val == pHead->next->val){
				while (pHead->val == pHead->next->val)
				{
					pHead->next = pHead->next->next;
				}
			}
			 
			pHead = pHead->next;
		}
		pHead = newHead;
		return pHead;
	}
};


int main()
{
	Solution s;
	ListNode l1(1), l2(2), l3(3), l4(3), l5(4), l6(4), l7(5);
	(&l1)->next = &l2;
	(&l2)->next = &l3;
	(&l3)->next = &l4;
	(&l4)->next = &l5;
	(&l5)->next = &l6;
	(&l6)->next = &l7;
	ListNode *l= s.deleteDuplication(&l1);
	while (l){
		cout << l->val;
		l = l->next;
	}
	system("pause");
	return 0;
}

 

posted @ 2017-10-25 16:46  bananaa  阅读(162)  评论(0编辑  收藏  举报