抱歉,因为我目前正在研究 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/