c - SplitLinkedList如何拆分

标签 c list

抱歉,因为我目前正在研究 LinkedList,我收到了很多关于它的问题。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct _listnode
{
    int item;
    struct _listnode *next;
} ListNode;

void split(ListNode *head,ListNode **ptrEvenList,ListNode **ptrOddList);
void printList(ListNode *head);

int main()
{
    ListNode *head = NULL, *temp = NULL;
    ListNode *ptrEvenList = NULL, *ptrOddList = NULL;
    int i = 0;
    int index = 0;
    while (1)
    {
        printf("Enter a integer: ");
        scanf("%d", &i);
        if (i == -1)
            break;
        if (head == NULL)
        {
            head = malloc(sizeof(ListNode));
            temp = head;
        }
        else
        {
            temp->next = malloc(sizeof(ListNode));
            temp = temp->next;
            temp->next = NULL;
        }
        temp->item = i;
    }
    printList(head);
    split(head,&ptrEvenList, &ptrOddList);
    return 0;
}

void printList(ListNode *head)
{
    int i = 0;
    if (head == NULL)
        return;
    while (head != NULL)
    {
        printf("%d ", head->item);
        head = head->next;
    }
    printf("\n");
}
void split(ListNode *head, ListNode **ptrEvenList, ListNode **ptrOddList)
{
    ListNode *evenTemp =NULL, *oddTemp=NULL;
    while (head->next != NULL)
    {

        if (head->item % 2 == 0)
        {
            if (ptrEvenList == NULL)
            {
                ptrEvenList = malloc(sizeof(ListNode));
                evenTemp = ptrEvenList;
            }
            else
            {
                evenTemp->next = malloc(sizeof(ListNode));
                evenTemp = evenTemp->next;
                evenTemp->next = NULL;
            }
            evenTemp->item = head->item;
        }
        if (head->item % 2 != 0)
        {
            if (ptrOddList == NULL)
            {
                ptrOddList = malloc(sizeof(ListNode));
                oddTemp = ptrOddList;
            }
            else
            {
                oddTemp->next = malloc(sizeof(ListNode));
                oddTemp = oddTemp->next;
                oddTemp->next = NULL;
            }
            oddTemp->item = head->item;
        }
        head = head->next;
    }
    printList(ptrEvenList);
    printList(ptrOddList);
}

我正在尝试通过 OddList 和 EvenList 从整数中拆分我的链表。但是我不确定我哪里出错了。它似乎在拆分功能上有错误。在 printList 之后,我的程序自动终止。

最佳答案

目前遇到的问题:
1) 你会错过最后一个节点,应该这样做:

while (head != null)

2) (这将是您的主要问题,我认为)您在创建第一个元素时没有初始化 next 指针。使用 calloc 或设置 next = null;


编辑:
最好的办法是:调试!

调试器会告诉你哪一行导致终止。这不一定与问题所在一致:您很可能通过未初始化的指针引用无效内存(例如,就像我上面的第二点) - 但在调试器中,所有内容都会显示出来,您将解决问题.祝你好运!

关于c - SplitLinkedList如何拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22696405/

相关文章:

c - 不同机器上C数据类型的大小和sizeof(complex long double)

c - Head=Current=ptr有什么用;在(c)中?

java - J2ME 列表中的最大项目数

python - 优雅地扩展几个列表

python - 将列表从 ord 转换为 List

list - 如何编写检查项目是否在树中的函数?

Python:将多个列表连接成一个句子

c++ - 如何从具有指针的结构数组中删除元素?

c - 即使没有来自用户的输入,字符串也有内容

c++ - GDB。只捕获未捕获的异常