• 单链表基本操作


    主要是单链表的一些常见操作:像创建链表,删除结点,插入结点,链表逆序,按大小排序等

      1 #include <iostream>
      2 using namespace std;
      3 
      4 struct Node
      5 {
      6     int val;
      7     Node *next;
      8     Node(int x) :val(x), next(nullptr){}
      9 };
     10 
     11 //创建带有头结点的单链表
     12 void Create(Node *head)
     13 {
     14     int n;
     15     Node *p(head), *q;
     16     cout << "请输入元素个数及相应数据:";
     17     cin >> n;
     18     while (n--)
     19     {
     20         int value;
     21         cin >> value;
     22         q = new Node(value);
     23         q->next = nullptr;
     24         p->next = q;
     25         p = q;
     26     }
     27 }
     28 
     29 //获得链表长度
     30 int GetSize(Node *head)
     31 {
     32     int num = 0;
     33     Node *p = head->next;
     34     while (p)
     35     {
     36         num++;
     37         p = p->next;
     38     }
     39     return num;
     40 }
     41 //输出链表元素
     42 void Print(Node *head)
     43 {
     44     Node *p = head->next;
     45     while (p)
     46     {
     47         cout << p->val << ' ';
     48         p = p->next;
     49     }
     50 }
     51 
     52 //删除值为x的结点
     53 void Delete(Node *head, int x)
     54 {
     55     Node *p(head), *q;
     56     while (p->next && p->next->val != x)
     57     {
     58         p = p->next;
     59     }
     60     if (p->next)
     61     {
     62         q = p->next;
     63         p->next = q->next;
     64         delete[] q;
     65     }
     66     else
     67     {
     68         cout << "链表不存在值为" << x << "的结点" << endl;
     69     }
     70 }
     71 
     72 //链表逆序
     73 void Reverse(Node *head)
     74 {
     75     Node *p(head->next), *q(head->next);
     76     head->next = nullptr;
     77     while (p)
     78     {
     79         q = q->next;
     80         p->next = head->next;
     81         head->next = p;
     82         p = q;
     83     }    
     84 }
     85 
     86 //在升序链表中插入结点使之仍然有序
     87 void Insert(Node *head, Node *t)
     88 {
     89     Node *p(head);
     90     while (p->next && p->next->val < t->val)
     91     {
     92         p = p->next;
     93     }
     94     t->next = p->next;
     95     p->next = t;
     96 }
     97 //按升序排列
     98 void Sort(Node *head)
     99 {
    100     Node *p, *q;
    101     p = head->next;
    102     head->next = nullptr;
    103     while (p)
    104     {
    105         q = p;
    106         p = p->next;
    107         q->next = nullptr;
    108         Insert(head, q);
    109     }
    110 }
    111 
    112 void Tips()
    113 {
    114     cout << "
    请按键选择相应操作" << endl;
    115     cout << "-------------------------" << endl;
    116     cout << "1.输出链表" << endl;
    117     cout << "2.删除链表某一结点" << endl;
    118     cout << "3.链表逆序" << endl;
    119     cout << "4.按升序排列" << endl;
    120     cout << "-------------------------" << endl;
    121 }
    122 int main()
    123 {
    124     Node *head = new Node(0);
    125     head->next = nullptr;
    126     Create(head);
    127     Tips();
    128     char c;
    129     while (cin >> c)
    130     {
    131         switch (c)
    132         {
    133         case '1':
    134             Print(head);
    135             break;
    136         case'2':
    137             int valToDelete;
    138             cout << "请输入要删除结点的值:";
    139             cin >> valToDelete;
    140             Delete(head, valToDelete);
    141             Print(head);
    142             break;
    143         case'3':
    144             Reverse(head);
    145             Print(head);
    146             break;
    147         case '4':
    148             Sort(head);
    149             Print(head);
    150             break;
    151         default:
    152             break;
    153         }
    154         Tips();
    155     }
    156     
    157 }

    测试结果:

  • 相关阅读:
    CodeForces Round #678(Div2) E.Complicated Computations Mex性质,权值线段树
    P6075 子集选取 思维
    HDU-4747 Mex 线段树应用 Mex性质
    P1273 有线电视网 树形DP 树上背包
    P6786 GCDs & LCMs 数学推导
    [CTSC1997] 选课 树上背包
    Gym-101915K Poor Ramzi 区间DP
    [MdOI R2] Odyssey 拓扑排序上DP
    CodeForces Div3.F
    二分-B
  • 原文地址:https://www.cnblogs.com/zhangbaochong/p/5146628.html
Copyright © 2020-2023  润新知