zoukankan      html  css  js  c++  java
  • 定义一个单链表及相关操作

    链表需要包含的操作有头插法建立链表、尾插法建立链表、在指定位置插入元素、打印链表、删除链表、寻找中间元素、单链表  1 // 定义一个链表及相关操作

      2 #include<iostream>
      3 using namespace std;
      4 
      5 struct LNode
      6 {
      7     int data;
      8     LNode *next;
      9 };
     10 
     11 class LinkList{
     12 public:
     13     LinkList(){head = new LNode;head->next=NULL};
     14     ~LinkList(){delete head;};
     15 
     16     void CreateF(int n); // 头插法建立链表
     17     void CreateR(int n); // 尾插法建立链表
     18 
     19     void Insert(int i,int _data); // 在指定位置插入链表
     20     void Output(); //打印链表
     21     void Clear(); // 删除链表
     22 
     23     LNode* findMid();  // 快速找到中间元素并返回其指针
     24     LNode *reverse(LNode* head); // 单链表逆置
     25 private:
     26     LNode *head;
     27 }
     28 
     29 
     30 void LinkList::CreateF(int n)
     31 {
     32     LNode *p;
     33     LNode *s;
     34     p = head;
     35 
     36     for(int i =0;i<n;++i){
     37         s = new LNode;
     38         cin>>s->data;
     39         s->next = p->next;
     40         p->next = s;
     41     }
     42 }
     43 
     44 void LinkList::CreateR(int n)
     45 {
     46     LNode *p;
     47     LNode *r;
     48     p = head;
     49     for(int i = 0;i<n;++i){
     50         r = new LNode;
     51         cin>>r->data;
     52         p->next = r;
     53         p = p->next;
     54     }
     55 }
     56 
     57 
     58 void LinkList::Insert(int i,int _data)
     59 {
     60     LNode *temp;
     61     temp = head;
     62     int j = 0;
     63     while(temp&&j<i-1){   // 找到i的位置
     64         temp = temp->next;
     65         j++;
     66     }
     67     if(!temp||j>i-1){
     68         cout<<"False!"<<endl;
     69     }else{
     70         LNode *s = new LNode;
     71         s->data = _data;
     72         s->next = temp->next;
     73         temp->next = s;
     74     }
     75 }
     76 
     77 void LinkList::Output()
     78 {
     79     LNode *p;
     80     p = head->next; // 注意不要写成p=head,因为头结点中没有保存数据
     81     while(p){
     82         cout<<p->data<<" ";
     83         p = p->next;
     84     }
     85 }
     86 
     87 void LinkList::Clear()
     88 {
     89     LNode *p,*q;
     90     p = head;
     91     while(p){
     92         q=p->next;
     93         delete p;
     94         p=q;
     95     }
     96     head->next = NULL;  //  这一步不能丢
     97 
     98 }
     99 
    100 LNode* LinkList::findMid()
    101 {
    102     LNode *p,*q;
    103     p=head;
    104     q=head;
    105     while(p!=NULL&&p2!=NULL){
    106         p = p->next;
    107         q = q->next->next;
    108     }
    109     return p;
    110 }
    111 
    112 LNode* LinkList::reverse(LNode* head)
    113 {
    114     if(head==NULL||head->next==NULL)
    115         return head;
    116     LNode *_pre=NULL,*_next=NULL;
    117 
    118     while(head!=NULL){
    119         _next = head->next;
    120         head->next = _pre;
    121         _pre = head;
    122         head = _next;
    123     }
    124     return head;
    125 }
  • 相关阅读:
    python操作adb代码
    android sdcard 权限管理策略研究
    glom模块的使用(二)
    爬虫错误汇总
    微博展开全文获取
    数据清洗之微博内容清洗
    Esxi5-管理平台vcenter5.0_数据库迁移流程
    migrating-vcenter-database-express-to-sql-2008-r2
    Centos生成SSL证书的步骤
    找到一篇关于2.4/5G信道的新介绍
  • 原文地址:https://www.cnblogs.com/ll-10/p/9700004.html
Copyright © 2011-2022 走看看