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

1. 问题描述: (1)建立单向链表,每个结点包括:学号(int),姓名(char name[]),性别(char)。(2)将一个新的结点插入到链表中某一个结点之后。(3)查找某一个结点将其从链表中删除。(4)输出处理过的链表。在主函数中分别调用创建、插入、删除和输出函数。2. 问题的解决方案:根据问题描述,首先创建链表,不仅要给各个结点输入数据,更重要的是要建立起前后结点相互联结的关系。可同时设置3个指针变量,head、p、q,它们都是结构类型的指针,分别代表表头、新建结点和表尾结点。使用new操作符开辟新的存储空间,用来存放新结点。而后输入某一个学号,找到与该学号对应的结点将新结点插入到其后。同样输入某一个学号,找到与该学号对应的结点将其从链表中删除。

第1个回答  2013-10-22
#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
相似回答
大家正在搜