链表逆置算法总结

01.有头节点的单链表

【方法1】头插法

LNode *Inverse(LNode *L){
	LNode *p, *q;
	p = L->next;
	L->next = NULL;
	while (p != NULL){
		q = p;
		p = p->next;
		q->next = L->next;
		L->next = q;
	}
	return L;
}

The best preparation for tomorrow is doing your best today.
对明天做好的准备就是今天做到最好!

【方法2】修改指针的指向(三指针法)
见无头结点方法1

【方法3】利用栈的特性
将节点全部压入栈中,再将节点从栈弹出用尾插法重新构建链表。

02.无头节点的单链表(原地工作)

【方法1】修改指针的指向(三指针法)
思想:新建三个指针pslow,pmid,pfast,pslow指向NULL,pmid和pfast指向首节点,让pfast往后移动,修改指针指向,让pmid指向pslow;然后让pslow和pmid同步往后移动,循环操作,当pfast指向NULL时,单链表就已经逆置了。pmid指向新链表的首节点。

初始状态

在这里插入图片描述

pfast往后移动

在这里插入图片描述

修改指针指向

在这里插入图片描述

	void Reverse(Plist *pHead){
	pList pFast = *pHead;//pHead为首节点
	pList pMiddle = *pHead;
	pList pSlow = NULL;
	while (pFast)
	{
		pFast = pFast->_pNext;
		pMiddle->_pNext = pSlow;
		pSlow = pMiddle;
		pMiddle = pFast;
	}
	*pHead = pMiddle;
}

【方法2】利用栈的特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值