leedcode翻转链表
把链表1->2->3->4->5->NULL翻转成5->4->3->2->1->NULL
把一个链表翻转过去,我们需要把头结点指向NULL,在指向NULL的时候,程序先需要保存head->next的下一个结点,所以我们需要一个临时结点tmp储存。然后再把head->next指向一个new的结点(new结点为NULL),这样原来的链表的头结点就会指向NULL。
随后,把head结点的地址赋值给new。
当head->next指向new的时候,就会没有原本链表的下一个位置,所以tmp之前记录的head->next就可以重新给head赋值。就可以继续遍历原来链表的结点。然后继续原来的步骤,先把head->next赋值给tmp,然后把head->next重新指向new,head的值赋值给new,tmp再赋值给head。
当我们遍历到最后的时候,再把new赋值给head。就完成了翻转。
代码实现
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* new = NULL;//创建新的空结点
while(head)
{
struct ListNode* tmp = head->next;//tmp记录head的下一个结点
head->next = new;//head结点的next指向前一个结点
new = head;//head赋值给新结点。
head = tmp;//head重新得到原来head->next的结点
}
head = new;
return head;
}