• 链表结点的交换


    题目:

    输入无序的元素,分别建立两个有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 }
  • 相关阅读:
    如何添加看板娘(转载的)
    golang gin LoadHTMLGlob 加载模板文件
    wpf Popup 不跟随窗口移动的问题
    golang 在vscode 安装插件失败的解决方法
    javaweb + tomcat + 部署 + 域名绑定 + 默认首页
    【RabbitMQ】三种Exchange模式——订阅、路由、通配符模式
    一切的浮点型进行计算操作都要用BigDecimal
    如何让mysql按照两个或多个字段排序
    JAVA枚举操作(获取值,转map集合)
    gitlab 配置 ssh key
  • 原文地址:https://www.cnblogs.com/hello-lijj/p/7768341.html
Copyright © 2020-2023  润新知