if(heada->num
<=
headb->num)//判断第一个节点是在a还是b上,小的作为新链表的头结点,然后设置指示指针pa,pb,p分别在a链表,b链表,新链表上向后移动
{head=heada
pa=heada->next
pb=headb}
else
{head=headb
pa=heada
pb=headb->next}
p=head
while(pa
&&
pb)//当a,b链表都没到达尾部时,比较a,b链表上当前指示指针pa,pb所指节点的大小,并把新链表的p指向较小的(pa或pb所指的),然后向后移动一下
{
if
(pa->num<=pb->num)
{p->next=pap=p->nextpa=pa->next}
else
{p->next=pbp=p->nextpb=pb->next}
}
if(pa)//说明a链表没到尾部,b链表已结束,直接把a链表剩下的部分接在新链表最后
{
p->next=pa
tail=taila
}
if(pb)//同上b链表后面的部分接在新链表后
{
p->next=pb
tail=tailb
}
tail->next=NULL
/***********end***********/
//创建data型结构,为生成链表做准备struct data
{
int value
data *next
}
//对链表进行排列的函数
void line(data *p,int n)
{ int temp,i,j
data *tp
for(i=0i<n-1i++)
for(j=0,tp=pj<n-i-1j++,tp=tp->next)
{ if(tp->value>tp->next->value)
{temp=tp->next->value
tp->next->value=tp->value
tp->value=temp
}
}
}
以上是冒泡法对链表排序的例子;
//输出答案的函数
void answer(data *p)
{ while(p!=NULL) {
cout<<p->value<<endl
p=p->next
}
}
以上是遍历链表的函数p是链表的头指针
#include<stdio.h>#include<malloc.h>
#include<string.h>
struct node
{
char data[20]
struct node*link
}
typedef struct node ListNode
void ListInsert(ListNode**L,char x[]) //构造链表时直接排序
{
ListNode *p, *q, *curr
p = (ListNode*)malloc(sizeof(ListNode))
//构造一个新结点
strcpy(p->data,x)
p->link = NULL
//原链表没有结点的情况
if((*L) == NULL)
{
(*L) = p
return
}
else if(strcmp(x,(*L)->data) <= 0)
{
p->link = (*L)
(*L) = p
return
}
else
{
curr = (*L)
q = (*L)
//找到比x大的第一个元素
while(q != NULL &&strcmp(x,q->data) >= 0)
{
curr = q
q = q->link
}
p->link = curr->link
curr->link = p
return
}
}
void Print(ListNode*L)//输出函数
{
ListNode *curr = L
while(curr!=NULL)
{
printf("%s ",curr->data)
curr=curr->link
}
}
void main()
{
int n,i
char a[20]
ListNode *head
head=NULL
printf("请你输入要输入的元素的个数: ")
scanf("%d",&n)
printf("请你逐个输入%d个字符型元素:\n",n)
for(i = 0i <ni++)
{
scanf("%s",a)
ListInsert(&head,a)
}
printf("链表中数据输出如下:\n")
Print(head)
}