链表逆序
我的写法
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;
}
可以发现书上的写法就没有另外搞一个内存分配了再释放原先的内存,直观简单。