链表的操作
设有一个线性单链表,其结点值均为整数(正整数,0,负整数),且按绝对值从小到大链接。试写出一个算法,将此线性单链表中的结点按值从小到大链接。
上述是题目:下面是代码可是运行不对请各位指教
#include<stdio.h>
typedef struct node
{
int data;
struct node *next ;
}node;
node *create()
{
int a;
node *p,*q,*head;
char ch;
ch='*';
head=(node*)malloc(sizeof(node));
q=head;
printf("please input the list:");
while(ch!='?')
{
scanf("%d",&a);
p=(node*)malloc(sizeof(node));
p->data=a;
q->next=p;
q=p;
}
q->next=NULL;
return (head);
}
node *tran(node *head)
{
node *p,*q,*r;
p=head->next;
q=p->next;
while(p!=NULL)
{r=q->next;
if(q->data<0)
{
p->next=r;
q->next=p;
p=q;
q=r;
}
else
p=p->next;
}
head->next=p;
return(head);
}
main()
{
node *p,*q;
p=create();
q=tran(p);
q=q->next;
while(q!=NULL)
{
printf("%d",q->data);
q=q->next;
}
getch();
}