(1) 设某带头结点的单链表的结点结构说明如下:
typedef struct nodel
{
int data
struct nodel * next ;
}node ;
试设计一个算法: void copy ( node * head1 , node * head2 ),将以 head1 为头指针的单链表复制到一个以 head2 为头指针的单链表中。
(2) 设有两个按升序排列的单链表 X 和 Y ,其实指针分别为 p 、 q ,结点结构说明如下:
typedef struct nodel
{
intdata ;
struct nodel * next
} node;
试设计一个算法 void concat ( node p , q ),将它们合并成一个以 p 为头指针的单链表 Z ,使其仍然有序。
(3) 写出在链式存储条件下,将单链表 L1 的元素连接在单链表 L2 的尾部的算法。
Link ( L1 , L2 )
(4) 写出删除单链表 L 中值大于 max 或小于 min 的元素的算法。
Delete9 ( L , max , min )
(5) 用 C 语言写出在链式存储条件下,删除但链表 L 中值相同的多余元素(使链表中元素的值均不相同)的算法。
Delete10 ( L )
(6) 用C 语言写出将单链表逆置的算法,即利用原来的顺序表将线性表 L= ( a1 , a2 , a3 ,…, an )逆置为 L= ( an ,…, a3 , a2 , a1 )。
move12 ( L )
(7) 设单链表 A= ( a1 , a2 , a3 ,…, an )和 B=(b1, b2, b3, …, bm ),用C 语言编写将 A 与 B 合并为单链表 C 算法。即:
C= ( a1 , b1 , a2 , b2 , a3 , b3 ,…, an , bn , bn+1 ,…, bm ) 当 n ≤ m
C= ( a1 , b1 , a2 , b2 , a3 , b3 ,…, am , bm , am+1 ,…, an ) 当 n ≤ m
其中 n 和 m 是已知条件, C 表利用 A 表和 B 表的结点空间。
Mpass13 ( A , B , C ,)
(8) 设单链表 A= ( a1 , a2 , a3 ,…, an )和 B= ( b1, b2, b3, …, bm )都是有序表(按值从小到大排列),用C 语言编写将 A 与 B 合并为链表 C 的算法, C 表也要求从小到大。
其中 n 和 m 不已知条件, C 表利用 A 表和 B 表的结点空间。
Mpass14 ( A , B , C )
(9) 已知 A , B , C 是三个按值从小到大有序的单链表,对 A 表进行如下操作:删除那些即在 B 表又在 C 表中元素。
Delete15 ( A , B , C )
(10) 已知指针 s 指向单向循环链表的一个有前驱的接点,写出删除该接点的直接前驱结点的算法。
Delete16 ( s )
(11) 已知单链表 L 是按值从小到大有序,将 X 插入到 L 链表中,并保持 L 链表有序,写出算法。
Insert ( L , X )
(12) 已知单链表 L 和指向 L 表中的一个结点的指针 R ,从 R 将 Lbiao 表分成两个单链表,要求 R 结点作为一个链表的首结点。
知道的大大们,帮忙一下,回答的时候把题号标一下