鏈表結點的交換


題目:

輸入無序的元素,分別建立兩個有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 }

 


免責聲明!

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



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