C鏈表反轉(時間複雜度O(n))

面試的時候經常會出現的問題,現在都做一遍,回憶一下,練練手.

這個題目需要注意兩點:

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; 
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章