首页 > 代码库 > [2013] 链表逆序

[2013] 链表逆序

题目二:逆序链表输出。 
题目描述:   
将输入的一个单向链表,逆序后输出链表中的值。链表定义如下: 
typedef struct tagListNode 

      int value; 
      struct tagListNode *next; 
}ListNode; 
 
要求实现函数:   
void converse(ListNode **head); 
【输入】head:    链表头节点,空间已经开辟好 
【输出】head:    逆序后的链表头节点
【返回】无 
【注意】只需要完成该函数功能算法,中间不需要有任何IO 的输入输出 

 

typedef struct tagListNode 
 { 
       int value; 
       struct tagListNode *next; 
 }ListNode; 

void converse(ListNode **head)
{
    if(head == NULL || (*head)== NULL || (*head)->next == NULL)
        return;
    ListNode *p1=(*head),*p2,*p3;
     p2 = p1->next;
       
    (*head)->next = NULL; //别忘了翻转后的末尾结点next为NULL
    while(p2 != NULL)
    {
       p3 = p2->next;
       p2->next = p1; //核心句
       p1 = p2;
       p2 = p3;
    
    }
    *head = p1;
}