//题目:编码实现环状单向链表,去除连续的重复元素的操作。
//思路:定义两个指针,其中p是q的前驱,然后逐个遍历,依次删除重复元素。
#include<iostream>
#include<assert.h>
using namespace std;
typedef struct node
{
int data;
struct node *next;
node(int x) : data(x), next(NULL) {}
};
node *Unique(node *head)
{
assert(head != NULL);
if(head->next = head)
return head;
node *p = head;
node *q = head->next;
while(q != head)
{
while(p->data == q->data && q != head)//删除重复元素
{
p->next = q->next;
free(q);
q = p->next;
}
if(q == head) break;
p = q;
q = q->next;
}
if(p->data == q->data)
{
p->next = q->next;//如果尾结点的值和第一个结点的值相等
free(q);
return p;
}
else
return q;//不等的情况下
}
删除环状单向链表中的重复元素的操作
最新推荐文章于 2023-08-05 21:48:36 发布