带头结点的单链表的创建(头插法和尾插法)

带头结点的单链表的创建(头插法和尾插法)

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct Node {
    int data;          //数据域
    struct Node*next;   //指针域
}LinkNode; //单链表节点类型


//头插法建立链表,带头结点
void CreateLinkHead(LinkNode*&L,int a[],int n) {
    L = (LinkNode *)malloc(sizeof(LinkNode));//创建头结点
    L->next = NULL;   //将头结点next域置空

    LinkNode *s;  //创建结点s
    for (int i = 0; i < n; i++) {
        s = (LinkNode *)malloc(sizeof(LinkNode));  //给结点s开辟空间
        s->data = a[i];   //给结点s的数据域赋值

        s->next = L->next;   //头插法进行插入
        L->next = s;

    }

}

//尾插法建立链表,带头结点
void CreateLinkEnd(LinkNode*&L, int a[], int n) {
    L = (LinkNode *)malloc(sizeof(LinkNode));//创建头结点
    L->next = NULL;   //将头结点next域置空
    LinkNode *s,*r;  //创建结点s和结点r
    r = L;     //开始的时候头结点和尾节点是同一个结点

    for (int i = 0; i < n; i++) {
        s = (LinkNode*)malloc(sizeof(LinkNode));  //给结点s开辟空间
        s->data = a[i];   //给结点s的数据域赋值
        

        r->next = s;
        r = s;
    }
        r->next = NULL;
}
 
//输出看对不对
void display(LinkNode *L) {
    LinkNode *p = L->next;     //指向有数据的第一个结点
    while (p!=NULL) {
        cout << p->data<<" ";
        p = p->next;
    }

}

int main() {
    LinkNode *L;
    cout << "请输入链表的数据的个数:";
    int n;
    cin >> n;

    int *a = new int[n];             //用数组来接收链表的数据

                                             //注意这里不能用int *a = new int(n),会报错的哟
    for (int i = 0; i < n;i++) {
        cin >> a[i];
    }
    
    CreateLinkHead(L,a,n);  //调用头插法的函数,这里输出的是倒序哦
    cout << "输出链表数据:" << endl;
    display(L);
    cout << endl;

    CreateLinkEnd(L, a, n);  //调用尾插法的函数,这里输出的是正序哦
    cout << "输出链表数据:" << endl;
    display(L);
    cout << endl;


    system("pause");
}


输出结果为:

请输入链表的数据的个数:5
1 3 6 9 5
输出链表数据:
5 9 6 3 1
输出链表数据:
1 3 6 9 5
请按任意键继续. . .

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页