单链表的头插法与尾插法代码实现及详解
Posted 大彤小忆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单链表的头插法与尾插法代码实现及详解相关的知识,希望对你有一定的参考价值。
1. 头插法
头插法: 从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头结点之后,直到读入结束标志为止。
头插法代码实现:
List HeadCreatList() //头插法建立链表
{
List L = (List)malloc(sizeof(PtrToNode)); //初始化空表,申请一个头结点
L->Next = NULL; //头指针为空
for (int i = 0; i < 2; i++)
{
List p = (List)malloc(sizeof(struct Node)); //p指向新申请的结点
cin >> p->Data;
p->Next = L->Next;
L->Next = p;
}
return L;
}
头插法代码详解:
2. 尾插法
尾插法: 从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表尾结点之后,直到读入结束标志为止。
尾插法代码实现:
List TailCreatList() //尾插法建立链表
{
List L = (List)malloc(sizeof(PtrToNode)); //初始化空表,申请一个头结点
L->Next = NULL; //头指针为空
List last = L; //last为指向尾结点的指针
for (int i = 0; i < 2; i++)
{
List p = (List)malloc(sizeof(struct Node)); //p指向新申请的结点
cin >> p->Data;
last->Next = p;
last = p; //last指向尾结点
}
last->Next = NULL;
return L;
}
尾插法代码详解:
3. 代码测试
#include<iostream>
using namespace std;
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List HeadCreatList() //头插法建立链表
{
List L = (List)malloc(sizeof(PtrToNode)); //初始化空表,申请一个头结点
L->Next = NULL; //头指针为空
for (int i = 0; i < 2; i++)
{
List p = (List)malloc(sizeof(struct Node)); //p指向新申请的结点
cout << "输入要插入的第" << i + 1 << "个元素:";
cin >> p->Data;
p->Next = L->Next;
L->Next = p;
}
return L;
}
List TailCreatList() //尾插法建立链表
{
List L = (List)malloc(sizeof(PtrToNode)); //初始化空表,申请一个头结点
L->Next = NULL; //头指针为空
List last = L; //last为指向尾结点的指针
for (int i = 0; i < 2; i++)
{
List p = (List)malloc(sizeof(struct Node)); //p指向新申请的结点
cout << "输入要插入的第" << i + 1 << "个元素:";
cin >> p->Data;
last->Next = p;
last = p; //last指向尾结点
}
last->Next = NULL;
return L;
}
void Print(List L)
{
if (L->Next)
{
List p = L;
while (p->Next)
{
p = p->Next;
cout << p->Data << " ";
}
}
else
{
cout << "NULL"; //空链表将输出NULL
}
cout << endl;
}
int main()
{
//头插法
cout << "头插法建立链表:" << endl;
List L1 = HeadCreatList();
cout << "L1:";
Print(L1);
//尾插法
cout << "尾插法建立链表:" << endl;
List L2 = TailCreatList();
cout << "L2:";
Print(L2);
system("pause");
return 0;
}
上述代码的运行测试效果如下图所示。
以上是关于单链表的头插法与尾插法代码实现及详解的主要内容,如果未能解决你的问题,请参考以下文章
leetcode-2 两数相加(链表的头插法尾插法两个不同长度链表相加减操作的处理方法)