劍指offer 面試題16 反轉鍊錶

2021-06-22 11:37:06 字數 1487 閱讀 4801

題目描述:輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。

(hint : 請務必使用鍊錶)

輸入:輸入可能包含多個測試樣例,輸入以eof結束。

對於每個測試案例,輸入的第一行為乙個整數n(0<=n<=1000):代表將要輸入的鍊錶的個數。

輸入的第二行包含n個整數t(0<=t<=1000000):代表鍊錶元素。

輸出:對應每個測試案例,

以此輸出鍊錶反轉後的元素,如沒有元素則輸出null。

樣例輸入:

5

1 2 3 4 5

0

樣例輸出:

5 4 3 2 1

null

完整**如下:

#include #include typedef struct listnodelistnode,*linklist;

void initlist(linklist *head);

void createlist(linklist head,int n);

void destorylist(linklist head);

void printlist(linklist head);

void reverselist(linklist head);

int main(void)

createlist(head,n);

// printlist(head);

reverselist(head);

printlist(head);

destorylist(head);

// printlist(head);

}return 0;

}//帶有頭結點的鍊錶

void initlist(linklist *head)

void createlist(linklist head,int n)

else

}}void destorylist(linklist head)

head->next = null; //這句話必須加上

}void printlist(linklist head)

printf("\n");

}void reverselist(linklist head)

if(head->next == null || head->next->next == null)

return ;

plow = head->next;

pmid = plow->next;

phight = pmid->next;

plow->next = null; //指標的賦值考慮全,不然得不到可靠的程式

while(pmid)

head->next = pmid;

}

劍指Offer面試題16 反轉鍊錶

反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...

劍指offer面試題16 反轉鍊錶

題目描述 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。鍊錶節點定義如下 public class listnode 示意圖 分析 為了正確反轉乙個鍊錶,需要調整鍊錶中指標的方向,為了將調整指標這個複雜的過程分析清楚,我們可以借助圖形來分析,如上圖所示,在 a 所示的鍊錶中...

劍指Offer 面試題16 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。分析 我們使用乙個棧,首先將鍊錶中的每乙個結點都儲存到棧中,然後將棧中的結點依次取出,重新構造鍊錶,注意,要保持頭結點不變,也就是說要在原來的鍊錶基礎之上重新構造新的反轉鍊錶!源 如下 include list.h includ...