1 #include <cstdio> 2 using namespace std; 3 struct LNode{ 4 int data; 5 struct LNode * next; 6 }; 7 struct LinkList{ 8 LNode * head,tail; 9 int len; 10 }; 11 void InitList(LinkList &L){ 12 L.len = 0; 13 L.head->next = NULL; 14 } 15 void CreateList_L(LinkList &L,int n){ 16 L.len = n; 17 LNode* & head = L.head; 18 head = new LNode(); 19 head -> next =NULL; 20 while(n--){ 21 LNode *p = new LNode(); 22 scanf("%d",&p->data); 23 p->next = head->next; 24 head->next=p; 25 } 26 } 27 void CreateList(LinkList &L,int n){ 28 L.len = n; 29 L.head = new LNode; 30 LNode *p = L.head; 31 while(n--){ 32 LNode * t =new LNode(); 33 scanf("%d",&t->data); 34 p->next = t; 35 p = t; 36 } 37 p->next = NULL; 38 } 39 void ListTraverse(LinkList L,void (visit)(LNode*)){ 40 LNode *p =L.head->next; 41 while(p!=NULL){ 42 visit(p); 43 p = p->next; 44 } 45 } 46 int ListInsert_L(LinkList &L,int i, int data){ 47 LNode * p =L.head; 48 int j = 0; 49 while(p&&j++<i ){ 50 p=p->next; 51 } 52 if(!p || i<0)return 0; 53 LNode *t = new LNode(); 54 t->data = data; 55 t->next = p->next; 56 p->next = t; 57 L.len++; 58 return 1; 59 } 60 int ListDelete_L(LinkList &L,int i,int &data){ 61 LNode *p = L.head; 62 int j=0; 63 while(p&&j++<i){ 64 p = p->next; 65 } 66 if(!(p->next) || i <0)return 0; 67 LNode *t = p->next; 68 p->next = p->next->next; 69 data=t->data; 70 delete t; 71 L.len--; 72 return 1; 73 } 74 int GetElem_L(LinkList L,int i,int &data){ 75 LNode *p = L.head; 76 int j=0; 77 while(p && j++<=i) p=p->next; 78 if(!p|| i<0 )return 0; 79 data=p->data; 80 return 1; 81 } 82 int MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){ 83 LNode *pa = La.head -> next; 84 LNode *pb = Lb.head -> next; 85 Lc.head=new LNode(); 86 LNode *pc = Lc.head; 87 while(pa&&pb){ 88 if(pa->data < pb->data){ 89 pc->next = pa; 90 pa = pa->next; 91 } 92 else{ 93 pc->next = pb; 94 pb = pb->next; 95 } 96 pc = pc -> next; 97 } 98 pc->next = pa == NULL?pb:pa; 99 } 100 void visit(LNode *p){ 101 printf("%d\n",p->data); 102 } 103 int main(){ 104 LinkList list,list2,list3 ; 105 // InitList(list); 106 CreateList(list,5); 107 CreateList(list2,5); 108 MergeList(list,list2,list3); 109 //ListInsert_L(list,-1,6); 110 //int v =123; 111 //GetElem_L(list,4,v); 112 //printf("%d",v); 113 ListTraverse(list3,visit); 114 return 0; 115 }
原文:http://www.cnblogs.com/Wade-/p/6349344.html