无头单链表的逆置(头插法和三个指针法)

本文介绍了链表逆置的两种常见方法:头插法和三指针法。通过画图理解逆置过程是解决问题的关键,掌握了这种方法,链表逆置问题将变得简单易解。

关于链表的逆置方法有许多,这里给大家讲述一下应用较为普遍的头插法和就地逆置法,解决问题的关键在于我们要学会自己画图去理解具体逆置的过程,有了思路,问题的解决自然就简单了很多。

头插法:
我的思路是先创建一个空结点pHead,然后让它指向NULL;然后定义三个指针变量,pCur是沿着原链表走,pPrev标记 pCur前一位依次把结点拆下来,插在pHead与pHead的next之间,循环至结束。
代码:
Node*_ReverseList(PNode*ppHead)
{
	assert(ppHead);
	Node*pCur = *ppHead;//接收头结点
	Node*pPrev = NULL;
	Node*pHead = BuyNode(NULL);//创建空结点
	while (pCur)
	{
		pPrev = pCur;//赋值
		pCur = pCur->pNext;//往后走一位
		pPrev->pNext = pHead->pNext;//pPrev指向pHead的下一位
		pHead->pNext=pPrev;//然后再把pHead与pPrev连上
	}
	pHead = pHead->pNext;//为了好看把空结点去掉
	return pHead;
}

就地逆置法:
思路是在原链表上进行逆置,同理,pCur沿着单链表走,pPrev标记其前一位,pTmp作为逆置之后的表头,每次逆置一遍更新pTmp一次。
Node*ReverseList(PNode*ppHead)
{
	assert(ppHead);
	Node*pCurNode = *ppHead;//接收头结点
	Node*pPrevNode 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值