C++数据结构之链表

本文介绍了如何在C++中实现链表数据结构,包括定义Node结构体,使用引用优化操作,以及链表的插入、删除和反转等操作。特别提到了删除节点的技巧和倒置链表的异或交换算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++数据结构------链表

体会引用的强大,

定义一个Node 存放一个data和指向下一个节点的指针next;

定义一个类 存放链表的头指针

      typedef int T;
      struct Node{
      T data;
       Node* next;
       Node(const T& d=T()):data(d),next(NULL){}
};
class List{
          Node* head;

};


插入删除一个节点:获取某个成员的成员指针,引用!

经典insert&&getptr函数:

 

    Node*&  List::getptr(int pos)//返回第K个成员的成员指针引用!
      {
     if(pos>size()||pos<0) return head;
     if(pos==0)  return head;
      Node* p=head;
      for(int i=1;i<pos;i++)
      {
        p=p->next;
      }
      return  (*p).next;
      }

       void List::insert(const T& d,int pos)
       {
          Node*& pn = getptr(pos);//注意引用!一直引用!
          Node* p=new Node(d);
          p->next = pn->next;
          pn=p;
      }

链表提供增删查改功能,注意内存释放clear()

  void List::clear()
  {  while(head)
        {
          Node* p=head->next;
          delete head;
          head=p;    
        } 
  }


  删除节点:

        假设删除第K个节点,getptr()获得指向第K个节点的指针的引用pn,

        ptemp=pn;

        delete ptemp;//释放第K个节点.

        pn=pn->next;

  倒置一个链表:

       我的算法:开辟数组Node* ptr[size()],遍历链表依次将各个指向节点的指针存放到数组中,循环交换 size()/2 次节点的data。

      Node* ptr[len];

      for(i=1;i<len;i++)

       ptr[i]=ptr->next;

      for(i=0;i<len/2;i++)

       SWAP(ptr[i]->data,ptr[len-i-1]->data); 

   SWAP交换实现:int a,b;a^=b;b^=a;a^=b;巧用异或运算。


   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值