【发布时间】:2015-02-06 18:37:47
【问题描述】:
我尝试编写一个名为“分离链表中的偶数和奇数节点”的单链表程序,但无法从 while 循环中退出。
我能够成功编译运行代码。我一步步跟踪程序四次以上,但找不到catch。
我所说的“在链接列表中分离偶数和奇数节点”的意思
输入: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;
};
【问题讨论】:
-
额外(虚拟)功劳:在不使用多个
if/else构造或多个循环构造的情况下实施该过程。
标签: c while-loop linked-list break