1.什么是单链表
单链表其实就是由一个数据域和一个指针所组成的结构体,数据域是用来存放你所要存储的数据,指针就是用来存储你所要存储数据的下一个节点指针。
单链表的代码格式
typedef struct LNode{ int data; struct LNode *next; } LNode,*LinkList;
2.单链表的创建
单链表的创建其实有两种方式,一种是头插法(让新来的节点先有所指向),他的遍历链表的顺序就与你说插入的数据的顺序相反,还有一种就是尾插法,遍历的顺序就与你所插入的数据的顺序相同的。
尾插法
LinkList createList(LinkList &head){ cout<<"请插入带插入的节点的数据,输入0结束本次链表的创建"<<endl; LinkList temp;//每次插入数据所用的新的节点 int data; head = (LinkList)malloc(sizeof(LNode)); head->next = NULL; cin>>data; //假设以 0 为创建链表结束 while(data != 0){ //输入新的数据后创建的节点指针 temp = (LinkList)malloc(sizeof(LNode)); temp->data = data; //语句1 //设置数据域 //先插入的节点指针先有所指向 temp->next = head->next; // head->next = temp; cin>>data; } return head; }
头插法
// 头插法 pList &head 指针的引用 LinkList createList(LinkList &head){ cout<<"请插入带插入的节点的数据,输入0结束本次链表的创建"<<endl; LinkList temp;//每次插入数据所用的新的节点 int data; head = (LinkList)malloc(sizeof(LNode)); LinkList workPoint = head;//工作 指针 用于指向最近插入的节点 // 也就是最后数据的节点 head->next = NULL; cin>>data; //假设以 0 为创建链表结束 while(data != 0){ //输入新的数据后创建的节点指针 temp = (LinkList)malloc(sizeof(LNode)); temp->data = data; //语句1 //设置数据域 workPoint->next =temp; workPoint = temp; cin>>data; } workPoint->next =NULL; return head; }
3完整代码
#include<iostream> #include <stdlib.h> #include <stdio.h> #include <string.h> using namespace std; typedef struct LNode{ int data; struct LNode *next; } LNode,*LinkList; // pList &head 指针的引用 LinkList createList(LinkList &head){ cout<<"请插入带插入的节点的数据,输入0结束本次链表的创建"<<endl; LinkList temp;//每次插入数据所用的新的节点 int data; head = (LinkList)malloc(sizeof(LNode)); head->next = NULL; cin>>data; //假设以 0 为创建链表结束 while(data != 0){ //输入新的数据后创建的节点指针 temp = (LinkList)malloc(sizeof(LNode)); temp->data = data; //语句1 //设置数据域 //先插入的节点指针先有所指向 temp->next = head->next; //语句1 head->next = temp; // cin>>data; } return head; } void printList(LinkList head){ int i =0; head = head->next; while(true){ if(head->next == NULL){ cout<<head->data; break; } if(head->next != NULL){ cout<<head->data<<","; head = head->next; } } } int main(){ //指针 LinkList head; head = createList(head); //遍历链表 printList(head); return 0; }
头插法完整代码
#include<iostream> #include <stdlib.h> #include <stdio.h> #include <string.h> using namespace std; typedef struct LNode{ int data; struct LNode *next; } LNode,*LinkList; // 头插法 pList &head 指针的引用 LinkList createList(LinkList &head){ cout<<"请插入带插入的节点的数据,输入0结束本次链表的创建"<<endl; LinkList temp;//每次插入数据所用的新的节点 int data; head = (LinkList)malloc(sizeof(LNode)); LinkList workPoint = head;//工作 指针 用于指向最近插入的节点 // 也就是最后数据的节点 head->next = NULL; cin>>data; //假设以 0 为创建链表结束 while(data != 0){ //输入新的数据后创建的节点指针 temp = (LinkList)malloc(sizeof(LNode)); temp->data = data; //语句1 //设置数据域 workPoint->next =temp; workPoint = temp; cin>>data; } workPoint->next =NULL; return head; } void printList(LinkList head){ LinkList temp; while((temp = head->next) !=NULL){ cout<<temp->data<<","; head = head->next; } } int main(){ //指针 LinkList head; head = createList(head); //遍历链表 printList(head); return 0; }