c - 无法退出 while 循环

标签 c while-loop linked-list break

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

相关文章:

c - 尝试使用 conio.h 的函数(特别是 textbackground)

c - 跳过c代码中的下一条指令

c - SIGEVENT sival_ptr 段错误

php - 使用爆炸过滤数组

c - 如何使用 settimeofday(2)?

java - 如何输出平均值的小数?

php - 向表mysql添加多个值

c - C中二叉搜索树的删除

C - 链表下一个节点为空

sql - 如何在sql中对链表进行排序?