在笔试中经常到将一个单向链表倒置的问题,看了网上的一些解法,觉得头插法是一种比较好的做法,记下来,供自己参考..
在数据结构(严蔚敏版)线性表一节中,有一个逆序创建链表的算法,头插法和这个算法差不多,区别就是逆序创建链表是用给出的数字序列创建链表,而头插法是在原来的链表中从第一个节点开始,每次取出一个节点,然后把这个节点插在头节点后面,直到最后一个节点插到头节点后面,那么原来的链表就倒置了..
下面是C++代码
LNode
*
Reverse(LNode
*
Head)
{
LNode * p = Head -> next;
LNode * q = NULL;
Head -> next = NULL;
while (p)
{
q = p -> next; // 保存下一个节点的指针
p -> next = Head -> next;
Head -> next = p; // 把取出的节点插入到头节点的后面
p = q;
}
return Head;
}
{
LNode * p = Head -> next;
LNode * q = NULL;
Head -> next = NULL;
while (p)
{
q = p -> next; // 保存下一个节点的指针
p -> next = Head -> next;
Head -> next = p; // 把取出的节点插入到头节点的后面
p = q;
}
return Head;
}