
讯享网
关注公众号程序猿从入门到入土查询更方便哦

建立两个非递减有序单向链表,然后合并成一个非递增链表
#include<iostream> #define RESULT int #define OK 1 #define ERROR 0 using namespace std; typedef struct Node {
int data; Node* next; }LNode, * LinkList; RESULT InitList(LinkList& L); //初始化链表 RESULT InsertData_Head(LinkList& L, int data); //头插 RESULT InsertData_Back(LinkList& L, int data); //尾插 RESULT InsertData_Middle(LinkList& L, int NO, int data); //在NO位置插入元素 RESULT Output_LinkList(LinkList& L); //打印链表 LinkList List_Combine(LinkList& L_1, LinkList& L_2); //合并链表,仅原空间 void ListSort(LinkList& L); void reverse(LinkList& L) {
LinkList p; int n = 1; p = L->next; while (p->next != NULL) {
p = p->next; n++; } LinkList back, back1, p1; p1 = L->next; p = L; for (int i = 0; i < n - 1; i++) {
while (p1->next != NULL) {
p1 = p1->next; } back = p1; p1 = L; while (p1->next->next != NULL) {
p1 = p1->next; } back1 = p1; back->next = p->next; back1->next = NULL; p->next = back; p = p->next; } } int main() {
//初始化链表L_1 LinkList L_1; if (!InitList(L_1)) {
return 0; } int n; cin >> n; while (n != 0) {
InsertData_Back(L_1, n); cin >> n; } ListSort(L_1); //初始化链表L_2 LinkList L_2; if (!InitList(L_2)) {
return 0; } cin >> n; while (n != 0) {
InsertData_Back(L_2, n); cin >> n; } ListSort(L_2); LinkList L_3 = new LNode; L_3 = List_Combine(L_1, L_2); reverse(L_3); Output_LinkList(L_3); //清除空间 delete(L_1); delete(L_2); return 0; } RESULT InitList(LinkList& L) {
L = new LNode; L->next = NULL; return OK; } RESULT InsertData_Head(LinkList& L, int data) {
LinkList temp = new LNode; temp->data = data; temp->next = L; L = temp; return OK; } RESULT InsertData_Back(LinkList& L, int data) {
LinkList temp = new LNode; temp->data = data; temp->next = NULL; LinkList p = L; while (p->next != NULL) {
p = p->next; } p->next = temp; return OK; } RESULT InsertData_Middle(LinkList& L, int NO, int data) {
LinkList temp = new LNode; temp->data = data; LinkList p = L; for (int i = 0; i < NO - 2; i++) {
p = p->next; } temp->next = p->next; p->next = temp; return OK; } RESULT Output_LinkList(LinkList& L) {
LinkList temp = L->next; while (temp != NULL) {
cout << temp->data << " "; temp = temp->next; } return OK; } LinkList List_Combine(LinkList& L_1, LinkList& L_2) {
//链表指针 LinkList p_1 = L_1->next; LinkList p_2 = L_2->next; LinkList L_3 = new LNode; LinkList p = L_3; while (p_1 != NULL && p_2 != NULL) {
/*if (p_1->data == p_2->data) { p->next = p_1; p = p_1; p_1 = p_1->next; p_2 = p_2->next; }*/ if (p_1->data < p_2->data) {
p->next = p_1; p = p_1; p_1 = p_1->next; } else {
p->next = p_2; p = p_2; p_2 = p_2->next; } } if (p_1 == NULL && p_2 != NULL) {
p->next = p_2; } if (p_2 == NULL && p_1 != NULL) {
p->next = p_1; } return L_3; } void ListSort(LinkList &head) {
LinkList p, q; for (p = head->next; p != NULL; p = p->next) for (q = p->next; q != NULL; q = q->next) if (p->data > q->data){
int t1 = p->data; p->data = q->data; q->data = t1; } }
讯享网
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/19133.html