// c_study.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
typedef struct Node {
struct Node* next;
int data;
};
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
typedef int ElementType;
List CreateLink()
{
//相当于头节点
Node *head = (Node*)malloc(sizeof(Node));
head->next = NULL;
return head;
}
Node* findLinkLast(Node* list) {
while (list->next) {
list = list->next;
}
return list;
}
void insert(Node* list, int a) {
Node *p = (Node*)malloc(sizeof(Node));
p->data = a;
p->next = NULL;
Node* q = findLinkLast(list);
q->next = p;
}
Position Advance(Position P)
{
return P->next;
}
ElementType
Retrieve(Position P)
{
return P->data;
}
static void CommonUnion(List head1, List head2)
{
Position PosOne = Advance(head1); //指向头结点的下一个节点
Position PosTwo = Advance(head2);
while (PosOne != NULL){
while (PosTwo != NULL){
if (PosOne->data == PosTwo->data){
printf("Union data is %d\n", PosOne->data);
}
else if (PosOne->data < PosTwo->data){
break; //若P1的数据比P2的数据小,说明P2当前位置后面
} //的数据都比P1大,应该换P1的下一个位置进行比较
PosTwo = PosTwo->next; //指向P2的下一个位置
}
PosOne = PosOne->next;//指向P1的下一个位置
}
return;
}
int main()
{
List L = CreateLink();
List P = CreateLink();
insert(L, 1);
insert(L, 2);
insert(L, 3);
insert(L, 4);
insert(L, 5);
insert(L, 6);
insert(P, 1);
insert(P, 2);
insert(P, 3);
insert(P, 4);
insert(P, 5);
CommonUnion(L, P);
system("pause");
return 0;
}
求两个有序链表的交集
最新推荐文章于 2023-05-21 16:04:28 发布