现在的位置: 首页 > 综合 > 正文

将两个带头节点链表单链表,合并成一个新的带头节点链表……

2013年09月09日 ⁄ 综合 ⁄ 共 1186字 ⁄ 字号 评论关闭

问题链接……

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
  int data;
  struct LNode *next;
}LNode,*LinkList;

LinkList link(LinkList S,LinkList T)//将S,T链接成新的链表并返回新链表指针……
{
	LinkList p,q,r;
	p=q=(LinkList)malloc(sizeof(LNode));//带头节点
	while(S->next!=NULL)//复制S链表
	{
		r=(LinkList)malloc(sizeof(LNode));
		r->data=S->next->data;
		q->next=r;
		q=r;
		S=S->next;
	}
	//q->next=T->next;//如果这样的的话,可以直接返回值,虽然没改变S,T的原有结构,但只要改变T,那么p的值也会变,改变S,p的值不会变

	while(T->next!=NULL)//链接复制T链表
	{
		r=(LinkList)malloc(sizeof(LNode));
		r->data=T->next->data;
		q->next=r;
		q=r;
		T=T->next;
	}
	q->next=NULL;
	return p;	//返回复制链表指针
}

void main()
{
	LinkList S,T,P,q,r;
	int k=10;
	S=q=(LinkList)malloc(sizeof(LNode));//S带头节点
	while(k)	//为S分配空间及赋值
	{
		r=(LinkList)malloc(sizeof(LNode));
		r->data=k;
		q->next=r;
		q=r;
		k--;
	}
	q->next=NULL;	//S的最后一个节点的下一个节点置空
	k=10;
	T=q=(LinkList)malloc(sizeof(LNode));	//T带头节点
	while(k)	//为T分配空间及赋值
	{
		r=(LinkList)malloc(sizeof(LNode));
		r->data=10-k;
		q->next=r;
		q=r;
		k--;
	}
	q->next=NULL;	//T的最后一个节点的下一个节点置空
	P=link(S,T);	//调用函数得到S,T链接后的新链表

	printf("S:\n");	//下面为输出各链表的值
	while(S->next!=NULL)
	{
		printf("%d ",S->next->data);
		S=S->next;
	}
	printf("\nT:\n");
	while(T->next!=NULL)
	{
		printf("%d ",T->next->data);
		T=T->next;
	}
	printf("\nP:\n");
	while(P->next!=NULL)
	{
		printf("%d ",P->next->data);
		P=P->next;
	}
	printf("\n\n");
}

抱歉!评论已关闭.