单链表总结(翻转,增删改查)

一、如何定义一个链表

template<class T>
struct ListNode {
		T _data;
		struct ListNode<T> * _next;
	};

template<class T>
struct SList {
	struct ListNode<T> * _head;
};

为何_next , _head之前要加struct?

其实可以加也可以不加  struct ListNode{}; 的类型其实是 struct ListNode 而不是 ListNode 

二、头插,头删,后插,后删等

博客链接

三、单链表的翻转

后删头插法

首先要定义 tmp=head->next ; old_head=head;

关键点是这个old_head始终都是上图中的"1"  "1"到哪儿 old_head便到了哪儿

第一步: 后删   将old_head指向tmp->next  即"1"斩断了和"2"的联系

第二步: 头插   tmp->next=head; 

                      head=tmp;   此时换"头"了 变成了"2"

第三部: 循环  tmp=old_head->next;   将old_head->next赋给 tmp  

使得整个步骤变得循环起来  old_head始终是"1"在往后直至变为最后一个元素 tmp始终是old_head的下一个元素

代码展示:

void ListReverse(SList<int> * plist) {                    //后删头插法
	ListNode<int> * old_head = plist->_head;
	ListNode<int> * tmp = plist->_head->_next;
	while (tmp) {
		old_head->_next = tmp->_next;
		tmp->_next = plist->_head;
		plist->_head = tmp;
		tmp = old_head->_next;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值