链表

文章介绍了C++中使用模板类实现的链表结构,包括头节点的使用、头插法的实现(如在`LinkStack`中的压栈操作),以及逆转链表的方法,如双指针法和递归。还提到如何通过交换头尾指针来交换链表结构,与vector类似的操作。
摘要由CSDN通过智能技术生成

 头节点为空哨兵

template <class T>
struct Node
{
	Node *next;
	T data;
	Node(const T &t = T()) : data(t), next(0) {} // T():一个空的T类型
};

template <class T>
class List
{
	Node<T> *head; //排头兵
	Node<T> *tail;
	int sz;
public:
	List()
{ 
...
head =new Node<T>()//初始化一个空的排头兵
} 
...
};

 pop_back:

4a9a1d0fc3db4684be7b56e3a217d227.png

逆转链表:

①头插法:

建立链表有头插法和尾插法两种

头插法的好处就是在插入和删除尾元素的时候时间复杂度都是O(1)

带头节点的头插法的简便写法:

template<class T>
void LinkStack<T>::push(const T& item)//压栈
{   myTop->next=new T(item,myTop->next);
   /* Node<T>* p=new T(item);
    p->next=myTop->next;
    myTop->next=p;    */
}

逆转 :

template<class T>
LinkNode<T>*  List<T>::Reverse(LinkNode<T>* p) 
{ 
   //摘下节点,头插表
   LinkNode<T>* head=NULL;
   while(p){
       LinkNode<T>*  node=p->next;
       p->next=head;
       head=p;
       p=node;
   }
   return head;
}

②双指针法:

d0b285a776874744b17a6369a345cf71.png

 ③递归:

方法一(本质是双指针):

c3ec7e1f746641b892948f7325114f96.png

方法二 (本质是头插法):

e3a56bce8252421bad018585df4ce553.jpeg

a52e42fa4c344663a75c6dc4cf4ea3f3.jpeg 

 

 

如果想要交换两个链表其实只需要交换头尾指针

vector相类似  的交换也只是交换buf

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值