/*
反轉鍊錶:
定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。
分析:假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向
h節點之前,先記下j節點。
因此調整時:需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個節點。
因此,我們需要設定三個節點。
剛開始將頭結點賦給當前節點,並設定對頭結點的特殊處理
如果到達尾結點,要對尾結點做特殊處理
輸入:輸入可能包含多個測試樣例,輸入以eof結束。
對於每個測試案例,輸入的第一行為乙個整數n(0<=n<=1000):代表將要輸入的鍊錶的個數。
輸入的第二行包含n個整數t(0<=t<=1000000):代表鍊錶元素。
輸出:對應每個測試案例,
以此輸出鍊錶反轉後的元素,如沒有元素則輸出null。
樣例輸入:
51 2 3 4 5
0樣例輸出:
5 4 3 2 1
null
*//*
關鍵:1 if(phead == null || *phead == null)//如果指向鍊錶指標的指標為空或者為空鍊錶,均返回false
2 node* pcurnode,*pfrontnode = null,*pnextnode,*preversehead;//初始時要設定上乙個節點為空,這是因為原來的首節點的指向要為空,這樣才能變成最後乙個
3 while(pcurnode != null)//一旦為空,表示到結尾了,該結束了
pcurnode->_next = pfrontnode;//讓當前節點指向前乙個節點
pfrontnode = pcurnode;//繼續向下遍歷
pcurnode = pnextnode;
4 if(phead == null || *phead == null)//有關鍊錶的任何操作需要判定指標是否為空
*/#include const int maxsize = 1001;
typedef struct node
node;
void buildlist(node** phead,int* parr,int n)//採用尾插法
node* pcurnode;
for(int i = 0 ; i < n ; i++)
else//建立頭結點}}
void freelist(node** phead)//刪除鍊錶
node* pnode;
while((*phead) != null)
}node* reverselist(node** phead)
bool isfirst = true;
node* pcurnode,*pfrontnode = null,*pnextnode,*preversehead;//初始時要設定上乙個節點為空,這是因為原來的首節點的指向要為空,這樣才能變成最後乙個
pcurnode = *phead;//就從頭結點開始迴圈,避免後面節點的判斷
while(pcurnode != null)//一旦為空,表示到結尾了,該結束了
pcurnode->_next = pfrontnode;//讓當前節點指向前乙個節點
pfrontnode = pcurnode;//繼續向下遍歷
pcurnode = pnextnode;
}return preversehead;
}void printlist(node** phead)
node* pnode = *phead;
bool isfirst = true;
while(pnode)
else
pnode = pnode->_next;
}printf("\n");
}void process()
int iarr[maxsize];
for(int i = 0 ; i < n ; i++)
node* head = new node();
node** phead = &head;//這樣做的原因是:好讓頭指標能夠修改,若直接傳遞node*作為頭節點,則修改後會作為區域性變數最後消失
buildlist(phead,iarr,n);//用尾插法建立鍊錶
node* pres = reverselist(phead);
if(pres)
else
freelist(&pres);}}
int main(int argc,char* argv)
劍指offer 面試題16 反轉鍊錶
題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...
劍指offer面試題16 反轉鍊錶
題目描述 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。鍊錶節點定義如下 public class listnode 示意圖 分析 為了正確反轉乙個鍊錶,需要調整鍊錶中指標的方向,為了將調整指標這個複雜的過程分析清楚,我們可以借助圖形來分析,如上圖所示,在 a 所示的鍊錶中...
劍指Offer 面試題16 反轉鍊錶
定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。分析 我們使用乙個棧,首先將鍊錶中的每乙個結點都儲存到棧中,然後將棧中的結點依次取出,重新構造鍊錶,注意,要保持頭結點不變,也就是說要在原來的鍊錶基礎之上重新構造新的反轉鍊錶!源 如下 include list.h includ...