/** * 用链表实现 王道 P40 T15 * * ①算法思想: * 首先将 A 链表断链, * 然后逐一比较 A B 两个链表, * 找出 data 插入相等的节点尾 A 。 * * ②数据结构: * typedef struct LNode{ * int data; * struct LNode *next; * }LNode,*LinkList; * * ③算法设计 */ #include <stdio.h> #include <iostream> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; LinkList EqualValueFromABToC(LinkList &A,LinkList &B){ LinkList r,p,s = A -> next,q = B -> next; A -> next = NULL; r = A; while(q){ p = s;///注意指令的位置 while(p) { if (p -> data == q -> data) { r -> next = p; r = p; break; }else{ p = p -> next; } } q = q -> next; } r -> next = NULL; return A; } 以下是测试程序 尾插法建立单链表(有头节点) LinkList CreatLinkListR(){ LinkList L = (LinkList)malloc(sizeof(LNode));//创建头结点,头指针L指向头节点 LinkList p = L,q; //这边不必让 L -> next 指向空,因为L保存了头结点指针,尾插一定会在L后插入一个新节点,所以L后面肯定会有节点而不是空, //p用于保存尾节点指针,因此应允许 p -> next 为空。 int data; while(1){ scanf("%d",&data); if(data == 99999) break; q = (LinkList)malloc(sizeof(LNode)); q -> data = data; p -> next = q; p = q; } p -> next = NULL; return L; } 循环单链表的遍历(有头节点,无头结点) 引入带头结点 L -> next ,传入无头结点 L LinkList Order(LinkList L){ while(L){//当L不是空的时候 printf("%d ",L -> data); L = L -> next; } printf("\n"); } int main(){ LinkList A = CreatLinkListR(); LinkList B = CreatLinkListR(); Order(A -> next); Order(B -> next); LinkList C = EqualValueFromABToC(A,B); Order(C -> next); }