[C语言]把一个长度为 n 的数组转换成链表并把链表前两个节点交换位置和把链表最后两个节点交换位置。

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

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

int main() {
    int n = 0;
    int i = 0;
    scanf("%d", &n);
    int arr[n];
    for (i = 0; i < n; i++){
        scanf("%d", &arr[i]);
    }

    //前两个
    Node head;
    Node *p;
    p = &head;

    for(i = 0; i < n; i++){
        if(i == 0){
            head.data = arr[i];
            head.next = NULL;
        }
        else{
            Node *New = (Node*)malloc(sizeof(Node));
            New->data = arr[i];
            New->next = NULL;
            p->next = New;
            p = p->next;
        }
    }

    //交换连接关系
    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->data);
        top = top->next;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值