C++实现删除单链表节点的功能(源代码+截图)

1.   删除链表中的一个节点。其主要思想就是改变链表的指针域,以此到达删除节点的目的。如下图:


C++实现删除单链表节点的功能(源代码+截图)_第1张图片

我们可以通过修改节点的指针域来删除12号节点。15->next=12->next


2.   删除链表节点的算法如下:

LNode *Delete_L(LNode *L, ElemType e)
{  
    Lnode *q=L;  *p=L;
   if(L= =NULL) 
   { cout<<"空链表\n";
          return L;
   }
   if(L->data= =key)
   {
   		q=L;
        L=L->next;
        delete q;  //删除节点
        return L;       
   } 
   while(p->data!=key && p->next!=NULL)
   {
   		q=p;
        p=p->next;
   }
   if(p->data= =key)
   {
        q->next=p->next;
        delete p;//删除节点
   }
   else 
   {
     	cout<<"没有指定的节点";
   }       
   return  L;
}


3.   完整的程序代码如下:

#include  
#include
#include  
using namespace std;  
  
struct Stu  
{  
    int age;  
    string name;  
    struct Stu* next;  
};  
  
struct Stu* CreateList()  //创建链表,年龄输入0,结束输入 
{  
    Stu *head;  
    head=(struct Stu*)malloc(sizeof(Stu));  
      
    Stu *p1,*p2;  
    if((p1=p2=(struct Stu*)malloc(sizeof(Stu)))==0)  
    {  
        cout<<"内存分配失败!"<>p1->age;  
    if(p1->age==0)  
    {  
        return 0;  
    }  
    cout<<"请输入姓名:";  
    cin>>p1->name;  
      
    int i=0;  
    while(1)  
    {  
        i++;  
        if(i==1)  
        {  
            head=p1;  
        }  
          
        p2->next=p1;  
        p2=p1;  
          
        if((p1=(struct Stu*)malloc(sizeof(Stu)))==0)  
        {  
            cout<<"内存分配失败!"<>p1->age;  
        if(p1->age==0)  
        {  
            p2->next=NULL;  
            return head;      
        }  
        cout<<"请输入姓名:";  
        cin>>p1->name;       
    }     
    return head;  
}  
struct Stu* DeleteList(struct Stu* h, int a)	//根据指定年龄,删除某个节点 
{
	struct Stu* p1=h;
	struct Stu* p2=NULL;
	if(p1==NULL)
	{
		cout<<"此链表为空"<next!=NULL && p1->age!=a)
	{
		p2=p1;
		p1=p1->next;
	
	}
	if(p1->age=a)
	{
		if(h==p1)
		{
			h=p1->next;
		}
		else
		{
			p2->next=p1->next;
			free(p1);
		}
	}
	else
	{
		cout<<"要删除的节点不存储在!"<age<<" "<name<<" "<next;  
    }
	cout<>delAge;
	
    head=DeleteList(head,delAge);
	cout<


4.   运行截图如下:


C++实现删除单链表节点的功能(源代码+截图)_第2张图片


注:本程序在devc++中通过测试

参考博客:C++实现单链表的创建和打印

你可能感兴趣的:(算法与数据结构)