单链表的逆置/反转

匿名 (未验证) 提交于 2019-12-03 00:30:01

题目:

单链表的逆置/反转。

解题思路:

思路一:

定义三个指针,n1,n2,n3,初始值分别为 :链表第一个节点,链表第二个节点,第三个节点。n2保存的是n1的地址,n3保存的是n2的地址,通过n3来往后遍历,直n2为空,这时n1指向最后一个元素,这时返回n1,就可以逆置链表

如下图:

代码实现:

SListNode *reserveNode(SListNode *pFirst) { 	SListNode *n1, *n2, *n3; 	if (pFirst== NULL || pFirst->pNext == NULL) 		return pFirst; 	n1 = pFirst; 	n2 = n1->pNext; 	n3 = n2->pNext; 	while (n2) 	{ 		n2->pNext = n1; 		n1 = n2; 		n2 = n3; 		if (n3) 			n3 = n3->pNext; 	} 	pFirst->pNext=NULL; 	pFirst = n1; 	return pFirst; }

思路二:

通过头插法:定义两个指针一个pNewNode指向空,pNode指向链表头,pNode遍历链表,在遍历的时候再定义一个指针来保存pNode遍历的值,然后头插到节点pNewNode上,而不是创一个新链表。

SListNode *reserveNode1(SListNode *pFirst) { 	SListNode *pNewNode = NULL; 	SListNode *pNode=pFirst; 	while (pNode) 	{ 		SListNode *next = pNode; 		pNode = pNode->pNext;  		//头插 		next->pNext = pNewNode; 		pNewNode = next; 	}  	return pNewNode; } 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!