当前位置:   article > 正文

链表逆置算法总结_数据结构链表逆置算法头插尾插

数据结构链表逆置算法头插尾插

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

【方法2】利用栈的特性

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/488015
推荐阅读
相关标签
  

闽ICP备14008679号