Supersystemaker 2022-04-15 20:47 采纳率: 60%
浏览 41
已结题

将两个链表中元素交错输出,却只输出前两个元素

问题遇到的现象和发生背景

将两个链表中元素交错输出,却只输出前两个元素

问题相关代码

错误应该在braid函数中

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

typedef struct Node Node;
struct Node {
    int value;
    struct Node *next;
};

Node* createListFromVector(int nums[], int n);
void printList(Node* list);
int sumOfElementsIn(Node* list);
Node* lastElementOf(Node* list);
Node* concat(Node* one, Node* two);
Node* reverse(Node*list);
Node* braid(Node *list,Node *rev);

int main(int argc, char const *argv[])
{
    int nums[100] = {1, 8, 2, 7, 5, 3, 9, 0, 4, 6};
    Node* list = createListFromVector(nums, 5);
    Node* listRev = createListFromVector(nums, 5);

    printList(list);
    printf("\n");
    listRev = reverse(list);
    printList(listRev);
    printf("\n");
    list=braid(list,listRev);
    printList(list);
    // Node* fullList = createListFromVector(nums, 10);    
    // list = concat(list, fullList);
    // printList(list);   
    // printf("sum = %d\n", sumOfElementsIn(list));
    // printf("last value = %d\n", (lastElementOf(list))->value);
    return 0;
}
Node* braid(Node *list,Node *rev)
{
    Node *p=NULL,*temp=NULL;
    for(p=list;p!=NULL;p=p->next->next)
    {
        temp=rev->next;
        rev->next=p->next;
        p->next=rev;
        rev=temp;
    }
    return list;
}

Node* reverse(Node*list)
{
    if(!list)
    return NULL;
    Node *prev=NULL,*curr=list,*temp;
    while (curr)
    {
        temp=curr->next;
        curr->next=prev;
        prev=curr;
        curr=temp;
    }
    return prev;

}

Node* concat(Node* one, Node* two)
{
    if (one == NULL) {
        return two;
    }
    lastElementOf(one)->next = two;
    return two;
}


Node* lastElementOf(Node* list)
{
    if (list == NULL) {
        printf("No element.\n");
        return NULL;
    }
    Node* result = list;
    while (result->next != NULL) {
        result = result->next;
    }
    return result;
}

int sumOfElementsIn(Node* list)
{
    Node* curr;
    int sum = 0;
    for (curr = list; curr != NULL; 
         curr = curr->next) {
        sum += curr->value;    
    }
    return sum;
}


Node* createListFromVector(int* nums, int n)
{
    if (n < 1) {
        return NULL;
    }
    Node* head = (Node *)malloc(sizeof(Node));
    head->value = nums[0];
    head->next = NULL;

    Node* curr = head;
    for (int i = 1; i < n; i++) {
        Node* newNode = (Node *)malloc(sizeof(Node));
        newNode->value = nums[i];
        newNode->next = NULL;
        curr->next = newNode;
        curr = newNode;
    }
    return head;
}

void printList(Node* list)
{
    Node* curr;
    for (curr = list; curr != NULL; 
         curr = curr->next) {
             printf("%d\n", curr->value);
    }
}


运行结果及报错内容

第三段运行结果为1,5

img

我的解答思路和尝试过的方法

braid函数编写思路

img

我想要达到的结果

第三段期望输出结果为
1 5 8 7 2 2 7 8 5 1

  • 写回答

2条回答 默认 最新

  • Frank_Liuxing 2022-04-18 11:00
    关注

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月26日
  • 已采纳回答 4月18日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 定制ai直播实时换脸软件
  • ¥100 栈回溯相关,模块加载后KiExceptionDispatch无法正常回溯了
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中