PAT数据结构与算法题目

链表逆序

我的写法
struct ListNode *reverse( struct ListNode *head )
{
    struct ListNode *head1, *tail1, *p, *q;
    head1 = tail1 = p = q = NULL;
    for (p = head; p != NULL; p = p->next)
    {
        q = (struct ListNode*) malloc(sizeof (struct ListNode));
        q->data = p->data;
        q->next = NULL;
        if (tail1 = NULL)
            tail1 = q;
        else
            q->next = head1;
        head1 = q;
        free(p);
    }
    return head1;
}

书上的写法
struct ListNode *reverse( struct ListNode *head )
{
    struct ListNode *Old_head, *New_head, *Temp;
    Old_head = head;
    New_head = Temp = NULL;

    while (Old_head)
    {
        Temp = Old_head->next;
        Old_head->next = New_head;
        New_head = Old_head;
        Old_head = Temp;
    }
    head = New_head;
    return head;
}

可以发现书上的写法就没有另外搞一个内存分配了再释放原先的内存,直观简单。

你可能感兴趣的:(数据结构与算法)