链表操作复习
#include<iostream>using namespace std;// 链表的应用typedef struct Node{ int data; Node* next;}*LinkList;// 双向 typedef struct DNode{ int data; DNode* next; DNode* prior;}*DLinkList; void reverse(LinkList H){ // 逆置 Node *p = H->next; // 指向第一个节点 Node *q; H->next = NULL; while(p){ q = p; p = p->next; q->next = H->next; // 将当前节点插入头节点后 H->next = q; } } // 单链表合并LinkList merge(LinkList A, LinkList B){ LinkList C; Node *p, *q; p = A->next; q = B->next; C = A; C->next = NULL; Node *s; while(p && q){ if(p->data < q->data){ s = p; p = p->next; }else{ s = q; q = q->next; } // 插入 s->next = C->next; C->next = s; } if(p == NULL) p = q; while(p){ s = p; p = p->next; C->next = s; }} // 删除重复节点void pur_LinkList(LinkList H){ Node *p, *q, *r; p = H->next; if(p == NULL) return; while(p->next){ q = p; while(q->next){ if(q->next->data == p->data){ r = q->next; q->next = r->next; free(r); } else{ q = q->next; } } p = p->next; }} // 时间复杂度O(n^2) // 单链表转换为双向链表DLinkList Creat_DLinkList(LinkList L){ DLinkList H; DNode *rear, *s; Node *p; // 生成头节点 H = new DNode(); H->next = H; // 双向循环链表 H->prior = H; rear = H; // 尾指针 p = L->next; while(p){ DNode* s = new DNode; s->data = p->data; s->next = rear->next; // 至此,s已被附身成为rear s->prior = rear; rear->next = s; H->prior = s; rear = s; p = p->next; } return H; }int main(){ return 0;}