题解 | #牛牛的链表交换#

牛牛的链表交换

https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc

#include <stdio.h>
#include<stdlib.h>

typedef struct node
{
    int num;
    struct node *next;
}Node;

int main() 
{
    int n,i;
    int tmp;
    scanf("%d",&n);
    int dp[n];

    for(i=0;i<n;i++)
    {
        scanf("%d",dp+i);
    }

    Node head;
    Node *p;
    p=&head;

    for(i=0;i<n;i++)
    {
        if(0==i)
        {   
            head.num=dp[i];
            head.next=NULL;
        }
        else
        {
            Node *New=(Node *)malloc(sizeof(Node));
            New->num=dp[i];
            New->next=NULL;
            p->next=New;
            p=p->next;
        }
    }
    /* top作为起始位置 */
    /* 交换结点连接关系即可,数据不需要变化 */
    Node *top=head.next;
    p=head.next;
    head.next=p->next;
    p->next=&head;

    
    Node *last;
    Node *d;

    /* 找到到处第三位,该处的下级关系需要变动 */
    while(p->next->next->next!=NULL)
    {
        p=p->next;
    }

    last=p->next->next;
    d=p->next;
    p->next=last;
    p=d;

    last->next=p;
    p->next=NULL;

    while(top!=NULL)
    {
        printf("%d ",top->num);
        top=top->next;
    }
    
}

可能会稍有复杂,思路
先创建数组
遍历数组创建链表
头和第二个直接交换连接关系
遍历到倒数第三结点
变动链接

全部评论

相关推荐

12-02 17:22
已编辑
西安交通大学 Java
华为 昇腾 ai软件开发 薪资20k x (14-16),职级13A,5%公积金,c/cpp
BLOOMING7:闭眼滴滴,华子给的又少又累
点赞 评论 收藏
分享
10-06 12:46
门头沟学院 Java
跨考小白:定时任务启动
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
评论
3
1
分享
牛客网
牛客企业服务