单链表的逆转问题,需要3个临时变量temp1,temp2,temp3,他们是连续的3个节点,将temp2的next指针指向temp1,3个变量向后平移一位,循环执行以上步骤。具体算法如下:
template<class Type>
void LinkedList<Type>::ReverseLinkedList()
{
if(!head->next)
return;
LinkNode<Type>* temp1=head->next;
LinkNode<Type>* temp2=temp1->next;
temp1->next=NULL;
LinkNode<Type>* temp3;
while(temp2)
{
temp3=temp2->next;
temp2->next=temp1;
temp1=temp2;
temp2=temp3;
}
head->next=temp1;
}
以下来自转发博客:
点击打开链接
如何把一个单链表进行反转?
方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。
方法2:使用三个指针遍历单链表,逐个链接点进行反转。
方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
方法1:
浪费空间。
方法2:
使用p和q连个指针配合工作,使得两个节点间的指向反向,同时用r记录剩下的链表。
p = head;
q = head->next;
head->next = NULL;
现在进入循环体,这是第一次循环。
r = q->next;
q->next = p;
p = q;
q =r;
第二次循环。
r = q->next
q->next = p;
p = q;
q = r
第三次循环。。。。。
具体代码如下