当前位置:编程学习 > C/C++ >>

C++单向链表的删除和插入

1. 问题描述:

(1)建立单向链表,每个结点包括:学号(int),姓名(char name[]),性别(char)。

(2)将一个新的结点插入到链表中某一个结点之后。

(3)查找某一个结点将其从链表中删除。

(4)输出处理过的链表。在主函数中分别调用创建、插入、删除和输出函数。

2. 问题的解决方案:

根据问题描述,首先创建链表,不仅要给各个结点输入数据,更重要的是要建立起前后结点相互联结的关系。可同时设置3个指针变量,headpq,它们都是结构类型的指针,分别代表表头、新建结点和表尾结点。使用new操作符开辟新的存储空间,用来存放新结点。而后输入某一个学号,找到与该学号对应的结点将新结点插入到其后。同样输入某一个学号,找到与该学号对应的结点将其从链表中删除。

追问:大侠

能不能别写这么紧凑

还有

按照题目写下

无限谢谢啊!!!!!!


答案:#include<iostream> using namespace std; template<class TYPE> class ListNode{ private: TYPE data; ListNode * next; static ListNode * CurNode; static ListNode * head; public: ListNode():next(NULL) { head=CurNode=this; } ListNode(TYPE NewData):data(NewData),next(NULL) { } void AppendNode(TYPE Node); //添加结点 void DeleteNode(TYPE Node); //移除结点 void DispList(); //打印链表 void DelList(); //移除链表所有结点 }; template<class TYPE> ListNode<TYPE>*ListNode<TYPE>::CurNode; template<class TYPE> ListNode<TYPE>*ListNode<TYPE>::head; //链表头指针 template<class TYPE> void ListNode<TYPE>::AppendNode(TYPE NewData) { CurNode->next=new ListNode(NewData); CurNode=CurNode->next; } template<class TYPE> void ListNode<TYPE>::DispList() { CurNode=head->next; while(CurNode!=NULL) //遍历链表 { cout<<CurNode->data<<endl; //打印结点 CurNode=CurNode->next; } } template<class TYPE> void ListNode<TYPE>::DeleteNode(TYPE NewData) { ListNode *ProNode=head; CurNode=ProNode->next; while(CurNode!=NULL) //遍历链表 { if(CurNode->data!=NewData) //不是要移除的结点 { ProNode=ProNode->next; CurNode=CurNode->next; } else //是要移除的结点 { ProNode->next=CurNode->next; delete CurNode; //移除结点 CurNode=ProNode->next; //链表是否还有这个结点 要继续 } } } template<class TYPE> void ListNode<TYPE>::DelList() { ListNode *q; CurNode=head->next; while(CurNode!=NULL) //遍历链表 { q=CurNode->next; delete CurNode; //移除结点 CurNode=q; } head->next=NULL; } void main() { ListNode<char>CList; CList.AppendNode('A'); CList.AppendNode('A'); CList.AppendNode('B'); CList.AppendNode('C'); CList.AppendNode('1'); CList.AppendNode('2'); CList.AppendNode('3'); CList.AppendNode('e'); CList.AppendNode('2'); CList.AppendNode('2'); CList.AppendNode('f'); CList.AppendNode('g'); CList.AppendNode('g'); CList.DeleteNode('2'); CList.DeleteNode('A'); CList.DeleteNode('g'); CList.DispList(); CList.DelList(); }  6

上一个:c#和c++的语法是差不多的吗》
下一个:C++中关于函数的一点问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,