删除链表中重复的结点


</pre><pre name="code" class="cpp">//删除链表中重复的结点
#include <iostream>

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

ListNode* deleteDuplication(ListNode* pHead)
{
	if(pHead==NULL||pHead->next==NULL)
		return pHead;
	ListNode* p;
	ListNode* q;
	ListNode* pre=NULL;
	bool toDelete=false;
	q=p=pHead;

	while(p!=NULL&&q!=NULL)
	{	
		q=p->next;
		if(q==NULL)
			toDelete=false;

		while (q!=NULL&&p->val==q->val)
		{
			q=q->next;
			toDelete=true;
		}
	  if(!toDelete)  //无重复
	  {	 
		  if(pre==NULL)
		  {
			  pre=p;
			  pHead=pre;
		  }else
		  {
			  pre->next=p;
			  pre=p;
		  }
		  p=q;
	  }
	  else
	  {
		  p=q;
	  }
       if(pre==NULL&&p==NULL&&toDelete)
		   return NULL;
		toDelete=false;
	}
	pre->next=NULL;
	return pHead;
}

void main()
{
	ListNode no1(1),no2(1),no3(3),no4(3),no5(3),no6(4),no7(4),no8(4);
	no1.next=&no2;
	no2.next=&no3;
	no3.next=&no4;
	no4.next=&no5;	
	no5.next=&no6;
	no6.next=&no7;
	no7.next=&no8;

	ListNode* h=deleteDuplication(&no1);
	while(h!=NULL)
	{
		cout<<h->val<<" ";
		h=h->next;
	}
	system("pause");
}


题目描述

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

<span style="font-size:18px;background-color: rgb(153, 255, 153);">感想:这题写了好久,来来回回将近一天吧。快被自己乱糟糟的逻辑给整哭了,忍住没抄剑指的答案,最后还好牛客里所有测试用例都过了。</span>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值