線性表 刪除相同節點

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);
}

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