链表结点的交换

Posted 李家大少爷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表结点的交换相关的知识,希望对你有一定的参考价值。

题目:

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

 

以上是关于链表结点的交换的主要内容,如果未能解决你的问题,请参考以下文章

24链表-两两交换链表中的结点

交换链表中的相邻结点

leetcode 24.两两交换链表中的节点 思路详解附代码

链表结点的交换

力扣 - 24. 两两交换链表中的节点

链表反转&交换链表结点