法一:
list_node *list_reverse(list_node *head)
- {
- list_node *p = head->next;
- list_node *q = NULL;
- head->next = NULL;
- while(p != NULL)
- {
- q = p->next; /*保存下一个节点*/
- p->next = head->next; /*把节点插入到头结点后面*/
- head->next = p; /*头结点一直指向最新插入的节点*/
- p = q; /*调整指针,指向下一个节点*/
- }
- }
法二
void reverse(struct node *head)
{
struct node *p,*s,*t;
p = head;
s = p->next;
while(s->next != NULL)
{ //主要置换过程
t = s->next; // t为临时变量
s->next = p; // 实施反转
p = s; // p向前移动一个结点,为转换下一个结点做准备
s = t; // 恢复s指针,以便处理下一个结点
} // 此时s->next == NULL,循环结束
s->next = p; // 翻转最后一个结点
head->next->next = NULL; // head的next指向的结点是原链表的第一个数据结点
head->next = s; // 现在s是新的第一个数据结点
}
时间: 2024-10-29 19:08:35