單鏈表的創建


在進行單鏈表的基本運算之前必須先建立單鏈表,建立單鏈表的常用方法有兩種:頭插法建表和尾插法建表

頭插法建表,從一個空表開始,讀取字符數組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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM