2011-01-20 48 views
1

我對下面的一段代碼有幾個問題。請多多包涵。代碼可能很容易理解,但我仍處於學習過程中,所以對我來說這仍然是抽象的。將線性鏈表轉換爲循環鏈表

struct listNode { 
int data; 
struct listNode *next }; 

//Is J a pointer, pointing to the head of the linked list? 
struct listNode * convert (struct listNode * J) { 

if (J == NULL) 
    return NULL; 

//Is this creating a new temporary pointer that will traverse the linked list? 
//Is it being set to J so that it can start at the first node and go to the last? 
struct listNode * temp = J; 

while (temp -> next != NULL) 
    temp = temp->next; //Is this where the temp pointer actually goes through the list? 

//Temp->next will eventually become the last node of the list and that will be set to J 
//which is the head pointer? 
    temp->next = J; 

return temp; 
} 
+0

和你的問題是什麼? – sdadffdfd 2011-01-20 03:54:30

+0

我的問題在 – kachilous 2011-01-20 03:57:21

回答

3

一切你寫的評論是真實的,並在最後你可以考慮任何點作爲head因爲它是一個圓形的列表現在

線性鏈表和一個圓形的之間的唯一區別最後一個節點在第一種情況下指向NULL,或者它指向第一個節點,第二個節點指向第一個節點。

算法:

1)你把temp指針找到的最後一個節點(與J初始化它的頭,並解析列表,直到你打NULL)

2)你指向temp,這是現在的最後一個節點,到第一個節點,即J