单链表的建立
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。
输入以-1 作为结束
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 typedef struct LNode *List; 5 struct LNode 6 { 7 int data; 8 LNode *next; 9 }; 10 11 void InitList(List &L) 12 { 13 L = new LNode; 14 L->next = NULL; 15 } 16 17 void CreatList(List &L) 18 { 19 List r,s; 20 s = L; 21 int a; 22 while(1) 23 { 24 cin >> a; //输出以-1作为结束 25 if(a == -1) //尾插法 26 break; 27 r = new LNode; 28 r->data = a; 29 r->next =NULL; 30 s->next = r; 31 s = r; 32 } 33 s->next = NULL; 34 } 35 36 void PrintList(List &L) 37 { 38 List p; 39 p = L->next; 40 while(p) 41 { 42 cout << p->data << " "; 43 p = p->next; 44 } 45 } 46 47 void mergeList(List &L1,List &L2) 48 { 49 List pa,pb,pc,lc; 50 pa = L1->next; 51 pb = L2->next; 52 lc = new LNode; //新建头结点 53 pc = lc; // pc指向 lc 54 while(pa&&pb) 55 { 56 if(pa->data <= pb->data) 57 { 58 pc->next = pa; 59 pc = pa; 60 pa = pa->next; 61 } 62 else 63 { 64 pc->next = pb; 65 pc = pb; 66 pb = pb->next; 67 } 68 } 69 pc->next = pa?pa:pb;// 将pa或pb 没有遍历完的串 串入pc 70 free(L1); //释放掉L1,L2 71 free(L2); //如果要输出NULL 则 L1->NULL 72 PrintList(lc); 73 } 74 75 int main() 76 { 77 List a,b; 78 InitList(a); 79 CreatList(a); 80 InitList(b); 81 CreatList(b); 82 mergeList(a,b); 83 return 0; 84 85 }
运行结果
总结
1.每个链表都有一个头节点,该头节点数据无意义,只有指向下一节点的指针有效。
2.List L=new LNode代表了一个链表,L为指向头节点的指针
3.通常对链表的操作通过新创建一个指针p=L来操作链表的增删查找(头指针代表一个链表,其值不能改变)。
原文:https://www.cnblogs.com/invokerrr/p/11503098.html