码迷,mamicode.com
首页 > 其他好文 > 详细

链表结点的交换

时间:2017-11-01 21:47:25      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:赋值   define   第一个   amp   有序   argv   ret   creat   argc   

题目:

输入无序的元素,分别建立两个有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 }

 

链表结点的交换

标签:赋值   define   第一个   amp   有序   argv   ret   creat   argc   

原文地址:http://www.cnblogs.com/hello-lijj/p/7768341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!