第一步:创建链表A,链表B
第二步:查找最大,最小节点
第三步:遍历链表A,链表B最大、最小节点位置
第四步:删除链表A和链表B最大最小节点
第五步:合并成新链表
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
struct Node
{
int value;
Node* last;
Node* next;
};
int CheckSameValue(Node* list, int value)
{
return 0;
}
Node* FindMinNode(Node* list)
{
return min;
}
Node* FindMaxNode(Node* list)
{
return max;
}
void DeleteNodeInList(Node* list, Node* node)
{
Node* temp = list->next;
while (temp != NULL)
{
}
}
int CreateRandomLinkList(Node* head, int count, const char* name)
{
if (head == NULL)
return 0;
Node* p = head;
for (int i = 0; i < count; i++)
{
Node* q = (Node*)malloc(sizeof(Node));
}
printf("链表%s:", name);
Node* n = head->next;
while (n != NULL)
{
}
printf("\n");
return 1;
}
void AddNewLinkList()
{
Node* min1 = FindMinNode(list1);
Node* min2 = FindMinNode(list2);
Node* max1 = FindMaxNode(list1);
Node* max2 = FindMaxNode(list2);
DeleteNodeInList(list1, min1);
DeleteNodeInList(list1, max1);
DeleteNodeInList(list2, min2);
DeleteNodeInList(list2, max2);
printf("剔除原链表中最大值和最小值后合并后的有序链表为:\n");
printf("\n");
printf("原链表A中的最大值为%d, 在链表A中第%d位\n", MaxValue1, Max_1);
printf("原链表A中的最小值为%d, 在链表A中第%d位\n", MinValue1, Min_1);
printf("原链表B中的最大值为%d, 在链表B中第%d位\n", MaxValue2, Max_2);
printf("原链表B中的最小值为%d, 在链表B中第%d位\n", MinValue2, Min_2);
return;
}
int main()
{
srand((unsigned)time(NULL));
list1 = (Node*)malloc(sizeof(Node));
list2 = (Node*)malloc(sizeof(Node));
if (!list1 || !list2)
return 0;
list1->last = NULL;
list1->next = NULL;
list2->last = NULL;
list2->next = NULL;
CreateRandomLinkList(list1, 4, "A");
CreateRandomLinkList(list2, 5, "B");
AddNewLinkList();
return 0;
}
运行结果