线性表 删除相同节点

Description

已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。(O(1)表示算法的辅助空间为常量)。

Input

输入 n:6

输入数据:1 2 3 4 5 6

输入 item:5

Output

输出:1 2 3 4 6

Sample Input

101 2 3 4 5 6 7 8 9 108

Sample Output

1 2 3 4 5 6 7 9 10

HINT

#include <iostream>
using namespace std;
struct list            //构造
{
	int num;
	struct list *next;
};
int main()
{ 
	
	int item;
	list *head;
	list *creat(void);
	void print(list *);
	list *del(list *,int);
	head=creat();
	cin>>item;
	head=del(head,item);
	print(head);
	return 0;
}
list *creat(void)
{
	
	list *head,*p1,*p2;
	int i,n;
	cin>>n;
	head=NULL;
	for(i=0;i<n;i++)   //输入链表
	{	p1=new list;	
	    cin>>p1->num;
		if(head==NULL)    //头部输入时
			head=p1;
		else
		{
			p2->next=p1;
		}
		  p2=p1;		  		
	}
    p2->next=NULL;   //最后一个节点的后一个为NULL
    return head;
}
list *del(list *head,int item)
{
	list *p1,*p2;
	p2=p1=head;
	if(item==head->num)     //如果为头结点
	{
		head=head->next; 
		delete p1;
	}
	else   //不是头结点
	{
		p2=p1;    //p2记录p1前一个节点的位置
		p1=p1->next;
		for(;p1!=NULL;p1=p1->next)
		{
			if(item==p1->num)   //找到了
			{
				p2->next=p1->next;    //删除节点
			    delete p1;
			    break;
			}
			else   //没找到
				p2=p1;  向后移动
		}
	}
	return head;
}
void print(list *head)
{
	list *p1;
	p1=head;
	if(head!=NULL)
		do
		{
			cout<<p1->num<<" ";
			p1=p1->next;
		}while(p1!=NULL);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章