题目描述
试编写一个算法将单链表逆置,要求不能增加新节点。
分析步骤
单链表的逆置,分析来说就是,改变链表的指向。指向后面的,反过来指向前一个。最后改变指向链表指针的值就可以了.
将当前节点指向前一个节点,前一个节点如何去找?后面的链表应该如何标记。–>这就让我们有了思考:我们 可以用三个指针来标记当前节点、前一个节点和后面的链表,一个一个的来进行逆置,就可以啦。
代码
//逆置单链表
void InversionSLinkList(SLinkList** ppHead)
{
SLinkList* CurPre = NULL;
SLinkList* Cur = *ppHead;
SLinkList* CurNext = Cur->_pNext;
assert(ppHead);
//空链表
if (*ppHead == NULL)
return;
//非空链表
while (CurNext != NULL)
{
Cur->_pNext = CurPre;
CurPre = Cur;
Cur = CurNext;
CurNext = CurNext->_pNext;
}
Cur->_pNext = CurPre;
*ppHead = Cur;
}
头文件及运行结果
#include <stdio.h>
#include <string.h>
#include <assert.h>
typedef int DataType;
typedef struct ListNode
{
DataType _data; //当前节点中所保存的元素
struct ListNode* _pNext; //指向链表中下一个结点
}SLinkList, SListNode;