2)Р{Р?dl_node *p=h1->pre,*q=h2->pre;Р?int e=0;Р?while(q!=h2) Р每次相加,如果有进位则保存到e变量中Р?{Р int tmp=p->x+q->x+e;Р if(tmp>9999)Р {Р p->x=tmp%10000;Р e=tmp/10000;Р }Р elseР p->x=tmp;Р p=p->pre;Р q=q->pre;Р?}Р?Р当h1长度大于h2的时候,还要对未相加的部分进行操作Р?while(p!=h1)Р?{Р int tmp=p->x+e;Р if(tmp>9999)Р {Р p->x=tmp%10000;Р e=tmp/10000;Р }Р else Р p->x=tmp;Р p=p->pre;Р?}Р?p=h1->next;Р如果最高位得到的结果还有进位,那么就要再创建一个结点Р?if(e!=0)Р?{Р dl_node *s;Р s=(dl_node *)malloc(sizeof(dl_node));Р s->x=e;Р s->pre=p->pre;Р p->pre->next=s;Р s->next=p;Р p->pre=s;Р?}Р}Р元素值相减方法同相加类似Р最后结果保存在h1(即长串中)Рvoid list_sub(dl_node *h1,dl_node *h2)Р{Р?dl_node *p=h1->pre,*q=h2->pre;Р此处flag的值即位借位的值,借位的值为0或者为1,因为减0无关紧要Р?int flag=0;Р?while(q!=h2)Р?{Р if(p->x-flag>=q->x)Р {Р p->x-=q->x+flag;Р flag=0;Р }Р elseР {Р p->x=p->x+10000-q->x-flag;Р flag=1;Р }Р p=p->pre;