gpt4 book ai didi

c - 无法退出 while 循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:27:42 27 4
gpt4 key购买 nike

我尝试编写一个名为“在链表中分离偶数和奇数节点”的单链表程序,但无法从 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;

我是这样发现的:

  1. 编译器应该会警告您忘记初始化这些值。
  2. 单步执行,一旦进入 while 循环,您应该立即注意到 oddPtr 和/或 evenPtr 不为空。

关于c - 无法退出 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28372535/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com