单链表的创建方式:头插法和尾插法
声明单链表的数据结构
//*head表示头插法链表的头指针 //*LinkListHead表示头插法创建的链表 //tail表示尾插法链表的头指针 //*LinkListTail表示尾插法创建的链表 struct Node { int data; Node *next; } *head,*tail,*LinkListHead,*LinkListTail;头插法:
头插法创建单链表算法
Node *CreateLinkListByHead(int n){ Node *p; LinkListHead=new Node; LinkListHead->next=NULL; head=LinkListHead; for(auto i=0;i<n;i++){ p=new Node; p->data=i; p->next=LinkListHead>next; LinkListHead->next=p; } cout<<"头插法创建的单链表" return head; }尾插法
尾插法创建单链表算法
Node *CreateLinkListByTail(int n){ Node *p; LinkListTail=new Node; LinkListTail->next=NULL; tail=LinkListTail; Node *temp=LinkListTail; for(auto i=0;i<n;i++){ p=new Node; temp->next=p; temp=p; } temp->next=NULL; cout<<"尾插法创建的单链表"<<endl; return tail; }遍历链表:
void ForeachLinkList(Node *head){ Node *p=head->next; while(p!=NULL){ cout<<p->data<<" "; p=p->next; } cout<<"\n"; }测试代码如下:
int main(){ //头插法创建单链表 CreateLinkListByHead(10); //尾插法创建单链表 createLinkListByTail(10); //链表的遍历(头插法) ForeachLinkList(head); //链表的遍历(尾插法) ForeachLinkList(tail); }链表的删除
void DeleteLinkList(Node *head){ Node *p=head->next; Node *temp; while(p){ temp=p->next; delete p; p=temp; } head->next=NULL; }测试代码如下:
int main() { Node *LinkListHead = CreateLinkListByHead(10); ForeachLinkList(LinkListHead); Node *LinkListTail = CreateLinkListByTail(10); ForeachLinkList(LinkListTail); DeleteLinkList(LinkListHead); std::cout << "执行删除操作之后遍历链表" << std::endl; ForeachLinkList(LinkListHead); return 0; }输出如下所示:
工程地址: https://github.com/USuperMe/HeadAndTailInsertLinkList.git
欢迎关注公众号,不定期分享一些Unity3D、C#、C++ 数据结构和算法相关的学习知识:
