单链表的创建

在进行单链表的基本运算之前必须先建立单链表,建立单链表的常用方法有两种:头插法建表和尾插法建表

头插法建表,从一个空表开始,读取字符数组a中的字符,生成新节点,将读取的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,直到读完字符数组a的所有元素为止。

 

 

 

核心代码:

s->next = L->next;  // 新节点指向开始节点
L-next = s;  // 头结点指向s节点,使s成为开始节点

 

头插法建表虽然简单,但生成的链表中节点的次序和原数组的次序相反,若希望两者的次序一致,可采用尾插法建立

 

尾插法建表,该算法是将新节点插到当前链表的表尾上,为此必须增加一个尾指针r,使其始终指向当前链表的尾节点

核心代码:

      r->next=s;//将s插入到r后  r在前面初始化为 r = L  r是尾指针
      r=s;//使r指向尾结点

 

 

 

 

 

 

 实现代码:

 1 #include <cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdlib>
 5 
 6 using namespace std;
 7 
 8 typedef int ElemType;
 9 typedef struct LNode{
10    ElemType data;  //存放元素值
11    struct LNode *next;//指针域指向后继结点
12 }ListNode;
13 
14 
15 //头插法建表
16 void CreateListHead(ListNode *&L,ElemType a[],int n){
17 
18     ListNode *s;
19     L=(ListNode *)malloc(sizeof(ListNode));//创建头结点
20     L->next=NULL;   //将头结点next域置空
21 
22     for(int i=0;i<n;i++){   //循环建立数据结点
23         //创建数据结点*s
24         s=(ListNode *)malloc(sizeof(ListNode));
25 
26         //将结点s插在原开始节点之前,头结点之后
27         s->data=a[i];
28         s->next=L->next;
29         L->next=s;
30     }
31 }
32 
33 //尾插法建表
34 void CreateListTail(ListNode *&L,ElemType a[],int n){
35     ListNode *s,*r;
36     L=(ListNode *)malloc(sizeof(ListNode));//创建头结点
37     L->next = NULL; //将头结点next域置空
38     r=L;//r始终指向尾结点,开始时头结点和尾结点是同一个
39 
40     for(int i=0;i<n;i++){
41       s=(ListNode *)malloc(sizeof(ListNode));//创建数据结点
42 
43       s->data=a[i];//数据域
44       r->next=s;//将s插入到r后
45       r=s;//使r指向尾结点
46     }
47 
48     r->next=NULL;//尾指针指针域置空
49 
50 }
51 //输出
52 void DispList(ListNode *L){
53     ListNode *p=L->next;//p指向开始结点
54 
55     while(p!=NULL)
56     {
57         cout<<p->data<<" "; //输出数据域
58         p=p->next;
59     }
60     cout<<endl;
61 }
62 int main(){
63     ListNode *L;
64     int n;
65     cout<<"n:";
66     cin>>n;
67 
68     int *a=new int(n);
69     for(int i=0;i<n;i++){
70       cin>>a[i];
71     }
72     //头插法建表
73     CreateListHead(L,a,n);
74     cout<<"头插法建表:";
75     DispList(L);//输出
76 
77     //尾插法建表
78     CreateListTail(L,a,n);
79     cout<<"尾插法建表:";
80     DispList(L);//输出
81 }

 

 

 

 

 

参考:

https://blog.csdn.net/zmeilin/article/details/81193514

posted @ 2020-03-04 15:42  Lucky&  阅读(11988)  评论(0编辑  收藏  举报
//返回顶部开始
//返回顶部结束