面試的時候經常會出現的問題,現在都做一遍,回憶一下,練練手.
這個題目需要注意兩點:
1.head->next 要先設置爲NULL ,否則反轉後,它還是指向之前的next節點
2.需要有一個tmp指針,臨時保存p->next的地址,這個在改變一個節點的next地址時,經常會用到
示意圖
代碼實現
#include<stdio.h>
struct ListNode{
int data;
ListNode *next;
}
ListNode* reverse(ListNode* head){
ListNode *p,*tmp ;
p = head->next;
head->next=NULL;
while(p){
tmp = p->next; //圖1 保存p->next
p->next = head; //圖1 反向指向head
head = p ; //圖2 head 指向p
p = tmp; //圖2 p指向p->next
}
return head;
}