/**
* 用链表实现 王道 P40 T14
*
* ①算法思想:
* 一一比对两个链表,找出 data 相等的节点尾插放入 C。
*
* ②数据结构:
* 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 EqualValueC(LinkList &A,LinkList &B){
LinkList C,r,p,q = B -> next;
C -> next = NULL;
r = C;
while(q){
p = A -> next;//注意这条指令的位置
while(p) {
if (p -> data == q -> data) {
r -> next = p;
r = p;
break;
}else{
p = p -> next;
}
}
q = q -> next;
}
r -> next = NULL;
return C;
}
以下为测试程序
尾插法建立单链表(有头节点)
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 = EqualValueC(A,B);
Order(C -> next);
}
王道书P40 T14(单链表实现)
于 2022-07-15 17:07:59 首次发布