#include <cstdio> #include <cstdlib> #include <iostream>
#define MaxSize 100
typedef int ElemType;
using namespace std;
typedef struct LNode { ElemType data; struct LNode *next; } LNode, *LinkList;
LinkList List_HeadInsert(LinkList &L) { int x; LinkList s; L = (LinkList) malloc(sizeof(LNode)); L->next = nullptr; cout << "输入结点的值,输入9999表示结束:"; cin >> x; while (x != 9999) { s = (LinkList) malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; cout << "输入结点的值,输入9999表示结束:"; cin >> x; } return L; }
LinkList List_TailInsert(LinkList &L) { int x; L = (LinkList) malloc(sizeof(LNode)); LinkList s, r = L; cout << "输入结点的值,输入9999表示结束:"; cin >> x; while (x != 9999) { s = (LinkList) malloc(sizeof(LNode)); s->data = x; r->next = s; r = s; cout << "输入结点的值,输入9999表示结束:"; cin >> x; } r->next = nullptr; return L; }
LinkList GetElem(LinkList L, int i) { int j = 1; LinkList p = L->next; if (i == 0) return L; if (i < 1) return nullptr; while (p && j < i) { p = p->next; j++; } return p; }
LinkList LocateElem(LinkList L, ElemType e) { LinkList p = L->next; while (p->data != e && p != nullptr) { p = p->next; } return p; }
LinkList ListInsert(LinkList &L, int i, ElemType e) {
if (i < 1) return nullptr; LinkList p = GetElem(L, i - 1); LinkList s; s = (LinkList) malloc(sizeof(LNode)); s->data = e; s->next = p->next; p->next = s; return L;
}
LinkList ListDelete(LinkList &L, int i) {
LinkList p = GetElem(L, i - 1); LinkList q = p->next; p->next = q->next; ElemType e = q->data; free(q); return L;
}
ElemType ListLength(LinkList L) { int count = 0; LinkList p = L; if (p->next == nullptr) return 0; while (p->next != nullptr) { p = p->next; count++; } cout << "个数为:" << count << endl; return count; }
void List_show(LinkList &L) { if (L->next == nullptr) return; LinkList p = L; p = p->next;
int m = ListLength(L); for (int i = 0; i < m; i++) { cout << p->data << " "; p = p->next; } }
typedef struct DNode { ElemType data; struct DNode *prior, *next; } DNode, *DLinkList;
DLinkList DGetElem(DLinkList L, int i) {
return L; }
DLinkList DListInsert(DLinkList &L, int i, ElemType e) { DLinkList p = DGetElem(L, i - 1); DLinkList s; s = (DLinkList) malloc(sizeof(DNode)); s->next = p->next; p->next->prior = s; s->prior = p; p->next = s; return L; }
DLinkList DListDelete(DLinkList &L, int i) { DLinkList p = DGetElem(L, i - 1); DLinkList q = p->next; p->next = q->next; q->next->prior = p; free(q); return L; }
typedef struct SDNode { ElemType data; int next; } SLinkList[MaxSize];
void test1_Delete_x(LinkList &L, ElemType x) {
if (L->next == nullptr) return; if (L->data == x) { LinkList p = L->next; L->data = L->next->data; L->next = p->next; free(p); test1_Delete_x(L, x); } else { test1_Delete_x(L->next, x); }
}
void test2_Delete_x(LinkList &L, ElemType x) {
if (L->next == nullptr) return; LinkList p = L->next; LinkList pre = L;
while (p != nullptr) { if (p->data == x) { LinkList q = p; p = p->next; pre->next = p; free(q); } else { pre = p; p = p->next; } }
}
void test3_Reverse_output(LinkList L) { if (L->next != nullptr) test3_Reverse_output(L->next); cout << L->data << " "; }
LinkList test4_Delete_min(LinkList &L) { LinkList pre = L, p = pre->next, minpre = pre, minp = p; while (p != nullptr) { if (p->data < minp->data) { minp = p; minpre = pre; } pre = p; p = p->next; } minpre->next = minp->next; free(minp); return L; }
LinkList test5_Reverse_Local(LinkList &L) {
LNode *pre, *p = L->next, *r = p->next; p->next = nullptr; while (r != nullptr) { pre = p; p = r; r = r->next; p->next = pre; } L->next = p; return L; }
void test6_increasing_order(LinkList &L) { LinkList p = L->next, pre; LinkList r = p->next; p->next = nullptr; p = r; while (p != nullptr) { r = p->next; pre = L; while (pre->next != nullptr && p->next->data < p->data) pre = pre->next; p->next = pre->next; pre->next = p; p = r; } }
void test7_Delete_s_e(LinkList &L, ElemType s, ElemType e) { LinkList p = L->next, pre = L; if (L->next == nullptr) return; while (p != nullptr) { if (p->data > s && p->data < e) { LinkList q = p; p = p->next; pre->next = p; free(q);
} else { pre = p; p = p->next; } } }
LinkList test8_find_common_LNode(LinkList L1, LinkList L2) { int len1 = ListLength(L1), len2 = ListLength(L2); LinkList longList, shortList; int dist; if (len1 > len2) { longList = L1->next; shortList = L2->next; dist = len1 - len2; } else { longList = L2->next; shortList = L1->next; dist = len2 - len1; } while (dist--) longList = longList->next; while (longList != nullptr) { if (longList == shortList) return longList; else { longList = longList->next; shortList = shortList->next; } } return nullptr; }
int main() { LinkList L; List_TailInsert(L);
test3_Reverse_output(L);
return 0; }
|