- struct list_node {
-
struct list_node *next;
-
void *data;
-
};
-
-
/*
- 该函数用于倒转单链表
- 参数:head为输入的单链表头指针;
- 返回值为:倒转后的单链表的头指针;
- */
-
struct list_node *reverse_list(struct list_node *head)
-
{
- /* 检查是否为指针是否有效 */
-
if (!head) {
-
return NULL;
-
}
/* 初始化三个临时指针 */
-
struct list_node *p1, *p2, *p3;
-
p1 = head;
-
p2 = p3 = NULL;
/* 遍历该单链表,并利用三个临时指针,对单链表的节点的next进行交换 */
-
while (p1->next) {
-
p2 = p1->next;
-
p1->next = p3;
-
-
if (!p2->next) {
-
p2->next = p1;
-
return p2;
-
}
-
p3 = p2->next;
-
p2->next = p1;
-
-
if (!p3->next) {
-
p3->next = p2;
-
return p3;
-
}
-
p1 = p3->next;
-
p3->next = p2;
-
}
- p1->next = p3;
-
-
return p1;
-
}