带头结点的单链表

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;
}

 实验截图:

技术图片

以上是关于带头结点的单链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构-链表链表的相关算法

求不带头结点的单链表的逆置算法?

什么叫带头结点的链表? 什么叫不带头结点的链表?

每天进步一点点之带头节点单链表

单链表创建之--头插法创建带头结点的单链表,超详细

带头结点与不带头结点的单链表实现