題目:
輸入無序的元素,分別建立兩個有3個結點的有序單鏈表(有頭結點)(顯示排序后的鏈表),交換兩個單鏈表的第二個結點(注意不能采取直接賦值法的方式,要進行結點的移動),最后顯示鏈表中的元素。
1 #include <stdio.h> 2 #define ElemType int 3 4 //定義結構 5 typedef struct Node 6 { 7 ElemType data; 8 struct Node * next; 9 }Node, *LinkList; 10 11 //初始化 12 void InitList(LinkList *L) 13 { 14 *L = (LinkList)malloc(sizeof(Node)); 15 (*L)->next = NULL; 16 } 17 18 //尾插法創建 19 void CreatFromTail(Node *L) 20 { 21 Node *r, *s; 22 ElemType c; 23 int flag = 1; 24 r = L; 25 while(flag) 26 { 27 scanf("%d", &c); 28 if(c != 0) 29 { 30 s = (LinkList)malloc(sizeof(Node)); 31 s->data = c; 32 r->next = s; 33 r = s; 34 } 35 else 36 { 37 flag = 0; 38 r->next = NULL; 39 } 40 } 41 } 42 43 //打印鏈表 44 void print(Node *L) 45 { 46 Node *t, *p = L; 47 t = p->next; //t是頭結點 48 while(t != NULL) 49 { 50 printf("%d ", t->data); 51 t = t->next; 52 } 53 } 54 55 //實現交換 56 void swap(Node *L1, Node *L2) 57 { 58 Node *p1 = L1, *p2 = L2; 59 60 p1 = L1->next->next; 61 p2 = L2->next->next; 62 63 64 L1->next->next = p2; //L1->next 指向第一個節點, L1->next->next 指向第二個節點 65 L2->next->next = p1; 66 67 p1 = L1->next->next->next; 68 p2 = L2->next->next->next; 69 70 L1->next->next->next = p2; //L1->next 指向第一個節點, L1->next->next 指向第二個節點, L1->next->next->next 指向第三個節點 71 L2->next->next->next = p1; 72 73 74 } 75 // 76 int main(int argc, char const *argv[]) 77 { 78 Node *p1 = NULL; 79 Node *p2 = NULL; 80 InitList(&p1); 81 InitList(&p2); 82 CreatFromTail(p1); 83 CreatFromTail(p2); 84 // print(p1); 85 // print(p2); 86 swap(p1, p2); 87 print(p1); 88 print(p2); 89 return 0; 90 }