Loading...

链表操作复习

2024-12-03
0
-
- 分钟
|

链表操作复习

#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;}

文章目录