带头结点的单链表
Posted handsometaoa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带头结点的单链表相关的知识,希望对你有一定的参考价值。
代码:
/* *带头节点的单链表 */ #include<iostream> #include<stdlib.h> using namespace std; typedef struct ListNode { int data; struct ListNode* next; } Node,*PNode; //新建结点,num表示结点个数 PNode NewNode(int num) { //新建头结点 PNode head=(PNode)malloc(sizeof(Node)); if(head==NULL) { cout<<"头节点内存分配失败!"; exit(0); } PNode temp=head; temp->next=NULL; for(int i=0; i<num; i++) { //当前结点的数据 int num; cin>>num; //新节点 PNode node=(PNode)malloc(sizeof(Node)); if(node==NULL) { cout<<"节点内存分配失败!"; exit(0); } node->data=num; temp->next=node; temp=node;//使temp指向新建结点 } return head;//返回头结点 } //删除结点,temp表示删除链表的第几个结点 void Free(PNode node,int temp) { int num=1; while(temp!=num) { node=node->next; num++; } node->next=node->next->next; } //在尾部插入结点,temp表示插入的数据 void Insertoftail(PNode node,int temp) { while(node->next!=NULL)//注意判断条件是node->next!=NULL;指向最后一个结点就停止 { node=node->next; } PNode New=(PNode)malloc(sizeof(Node)); if(New==NULL) { cout<<"节点内存分配失败!"; exit(0); } New->data=temp; node->next=New; } //根据链表及数据,查找所在位置,只能查找第一个找到的 void Search(PNode node,int temp) { node=node->next; int num=0; while(node!=NULL) { num++; if(node->data==temp) { cout<<"您查找的数字"<<temp<<"在"<<num<<"位"<<endl; return; } node=node->next; } cout<<"未找到!"<<endl; } //输出链表数据 void Printf(PNode node) { node=node->next;//头节点需要跳过 while(node!=NULL) { cout<<node->data<<" "; node=node->next; } cout<<endl; } int main() { ListNode* head=NewNode(7);//新建长度为7的链表,逐个输入数据 Printf(head);//输出当前链表数据 Search(head,8);//查找数据为8的结点 Insertoftail(head,99);//在尾部插入数据为99的结点 Printf(head);//输出当前链表数据 Free(head,1);//删除第一个结点 Printf(head);//输出当前链表数据 return 0; }
实验截图:
以上是关于带头结点的单链表的主要内容,如果未能解决你的问题,请参考以下文章