简略方法
注意这里的pre指向的是头结点不是头指针
Node *reverse(Node *head) {
Node *former, *current, *later;
former = head->next;
current = head->next->next;
former->next = NULL;//首先将former的next置空,就是翻转后的链表尾
while (current) {
later = current->next;//由于会将current和former右移所以每一次循环都要将later重新进行置位
current->next = former;//将current原本向右指的指针向左指
former = current;//指针不断右移的过程
current = later;
}
return former;//目前的缺陷是返回的头结点而不是头指针,所以最好用没有头指针的输出方法
}
-------------------------------------------------------------------------------------
经过查阅发现这种方法太繁琐所以不建议用
这是别人的文章
现在对其进行自我的整理
链表翻转代码如下
list reverse(list head)
{
if (head->next == NULL || head->next->next == NULL)
{
return head; /*链表为空或只有一个元素则直接返回*/
}
list t = NULL;
list p = head->next;
list q = head->next->next;
while (q != NULL)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
/*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
head->next->next = NULL; /*设置链表尾*/
head->next = p; /*调整链表头*/
return head;
}
指针作用的说明
p=head->next;
q=head->next->next;
t=q->next;//此时t指针的作用我认为是用于将p的next首先暂存起来,然后让p,q都实现右移
代码的图文解释
list t = NULL;
list p = head->next;
list q = head->next->next;
while (q != NULL)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
.
/*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
head->next->next = NULL; /*设置链表尾*/
head->next = p; /*调整链表头*/
return head;