我尝试编写一个名为“在链表中分离偶数和奇数节点”的单链表程序,但无法从 while 循环中退出。
我能够成功编译和运行代码。我一步一步地跟踪程序四次多,但找不到问题。
我所说的“在链表中分离偶数和奇数节点”是什么意思
输入:17->15->8->12->10->5->4->1->7->6->NULL ;输出:8->12->10->4->6->17->15->5->1->7->NULL
输入:8->12->10->5->4->1->6->NULL ;输出:8->12->10->4->6->5->1->NULL
如果所有数字都是偶数则不要更改列表 输入:8->12->10->NULL 输出:8->12->10->NULL
如果所有数字都是奇数则不要更改列表 输入:1->3->5->7->NULL 输出:1->3->5->7->NULL
我是如何解决这个问题的:
temp : 遍历列表。
evenPtr :指向偶数据节点的指针。
oddPtr : 指向奇数据节点的指针。
oddPtrStart :跟踪奇数数据节点的开始。
我的功能如下:
struct node *segregateEvenOddNodesSLL(struct node *temp)
{
struct node *evenPtr,*oddPtr,*oddPtrStart,*head=NULL;
head=temp;
while(1)
{
if(((temp->data)%2)==0) // even
{
if(evenPtr==NULL)
{
head=temp;
evenPtr=temp;
}
else
{
evenPtr->link=temp;
evenPtr=temp;
}
}
else // odd
{
if(oddPtr==NULL)
{
oddPtrStart=temp;
oddPtr=temp;
}
else
{
oddPtr->link=temp;
oddPtr=temp;
}
}
temp=temp->link;
if(temp==NULL)
{
break;
}
printf("\n Inside While.... \n");
}// end of while.
if(evenPtr==NULL)
{
return head;
}
else if(oddPtr==NULL)
{
return head;
}
else
{
oddPtr->link=NULL;
evenPtr->link=oddPtrStart;
return head;
}
}
调用函数 head=segregateEvenOddNodesSLL(head);
通常单向链表的结构是:
struct node
{
int data;
struct node *link;
};
最佳答案
检查以下行:
struct node *evenPtr,*oddPtr,*oddPtrStart,*head=NULL;
需要:
struct node *evenPtr=NULL,*oddPtr=NULL,*oddPtrStart=NULL,*head=NULL;
我是这样发现的:
- 编译器应该会警告您忘记初始化这些值。
- 单步执行,一旦进入 while 循环,您应该立即注意到 oddPtr 和/或 evenPtr 不为空。
关于c - 无法退出 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28372535/