#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}Node,*LinkList;
int CreatLinkList(LinkList L)//尾插法建表
{
int ch;
Node *s;
Node *r;
r=L;
while(true)
{
cin>>ch;
if(ch==999)
break;
else
{
s=new Node;
s->data=ch;
r->next=s;
r=s;
}
r->next=NULL;//这句不能少了,少了就会崩溃
}
return 0;
}
int add(LinkList L)//加1原则:从地位向高位找第一个出现的0,把此0改为1,然后把后面地位的全部改为0
{
Node *p,*r;
r=L;
p=L->next;
while(p!=NULL)
{
if(p->data==0)
r=p;
p=p->next;
}
if(r!=L)//说明二进制数中有0
{
r->data=1;
while(r->next!=NULL)
{
r->next->data=0;
r=r->next;
}
r->data=0;
}
else
{
Node *temp;
temp=new Node;
temp->next=L->next;
r->next=temp;
temp->data=1;
r=temp->next;
while(r!=NULL)
{
r->data=0;
r=r->next;
}
}
return 0;
}
int main()
{
LinkList L1;
L1=new Node;
L1->next=NULL;
CreatLinkList(L1);
add(L1);
Node *p;
p=L1->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
return 0;
}
链表存储二进制,并且把此二进制数加1
最新推荐文章于 2018-01-16 17:33:00 发布