#include<bits/stdc++.h> using namespace std; // 结点定义 typedef struct LNode { int data; struct LNode* next; } LNode, *LinkList; // 打印 void Print(LinkList L) { LinkList tmp = L->next; while (tmp != L) { cout << tmp->data << " "; tmp = tmp->next; } cout << '\n'; } // 头插法 void headInit(LinkList &L, int n) { while (n--) { LinkList p = new LNode; p->next = NULL; cin >> p->data; p->next = L->next; L->next = p; } } // 尾插法 LinkList tailInit(LinkList &L, int n) { LinkList tail = L; while (n--) { LinkList p = new LNode; p->next = L; cin >> p->data; tail->next = p; tail = p; } return tail; } // 插入 void InsertList(LinkList &L, int i, LinkList &p) { LinkList tmp = L; int j=0; while (j<i-1 && tmp->next!=L) { j++; tmp = tmp->next; } LinkList s = tmp->next; tmp->next = p; p->next = s; } // 删除 void PopList(LinkList &L, int i) { LinkList tmp = L; int j=0; while (j<i-1 && tmp->next!=L) { j++; tmp = tmp->next; } LinkList del = tmp->next; tmp->next = del->next; delete del; } // 查找 void findList(LinkList &L, int data) { LinkList tmp = L->next; while (tmp != L) { if (tmp->data == data) { cout << "OK\n"; return; } tmp = tmp->next; } cout << "NO\n"; } // 合并 void unionList(LinkList &L1, LinkList &L1_tail, LinkList &L2, LinkList &L2_tail) { L1_tail->next = L2->next; L2_tail->next = L1; delete L2; } // 转置 LinkList reverseList(LinkList &L) { LinkList head = new LNode; LinkList pre = head; LinkList cur = L->next; while (cur != L) { LinkList tmp = cur->next; cur->next = pre; pre = cur; cur = tmp; } head->next = pre; return head; } signed main() { LinkList L1 = new LNode; L1->next = L1; headInit(L1,5); Print(L1); LinkList L2 = new LNode; L2->next = L2; tailInit(L2,5); Print(L2); LinkList p = new LNode; p->data = 2; InsertList(L2,6,p); Print(L2); PopList(L2,6); Print(L2); findList(L2,7); LinkList L3 = new LNode; LinkList L3_tail = tailInit(L3,5); LinkList L4 = new LNode; LinkList L4_tail = tailInit(L4,5); Print(L3); Print(L4); unionList(L3,L3_tail,L4,L4_tail); Print(L3); Print(reverseList(L3)); }
线性表之循环链表
于 2024-03-21 22:48:26 首次发布