将两个带头节点链表单链表,合并成一个新的带头节点链表……
2011-09-19 17:01
302 查看
问题链接……
#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"); }
相关文章推荐
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 数据结构:设有一个不带头结点的单链表L,设计两个递归算法,del(L,x)删除单链表L中第一个值为x的节点,delall(L,x)删除单链表L中的最小节点值。
- 设ha和hb分别是两个带头节点的费递减有序单链表的表头指针,设计以算法,将将两个有序链表合成一个非递减的有序单链表,该程序以以前发表的博客中的链表中的区别在与该立案表带有头结点
- 笔试题四:带头节点head两个链表合并,并且有序
- 3.两个有序单链表合并为一个有序的单链表
- 《数据结构》将一个带头结点的单链表分解成两个单链表
- 数据结构——算法之(033)(两个有序单链表合并为一个有序的单链表)
- 将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表
- 9、单链表的合并,两个有序单链表,合并为一个有序链表。
- 带头节点的循环链表及两个循环链表的合并
- 给定一个链表和一个值x,对它进行分区,使得小于x的所有节点都在大于或等于x的节点之前.保留两个分区中的每一个节点的原始相对顺序。
- 在单链表中将两个链表合并,合并之后的链表使用的是输入链表的节点空间,合并之后输入链表变为空表
- 将两个递增的链表合并成一个递减的链表(相同的元素只留下一个),并要求利用原表结点
- 两个链表合并为一个链表
- 21.输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判
- 给定一个链表,交换每两个相邻节点并返回其头部。
- 判断两个链表是否相交和一个单链表是否有环及环的链接点(转)
- 【链表面试题】删除无头单链表的非尾节点,插入一个元素到无头链表指定位置
- 合并两个链表成一个升序链表
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)