單鏈表反轉有遞迴和非遞迴兩種演算法。
下面定義節點
[cpp]view plain
copy
typedef
struct listnodelistnode;
在遞迴演算法中的做法是:
1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼
2反轉這兩個節點
3倒數第三個和第四個節點重複執行步驟2
其中注意,鍊錶是以節點後繼為null結束的,在更改指標的過程中要把改後的節點後繼改為null
**如下:
[cpp]view plain
copy
void inversion_recursion(listnode* p,listnode* head)
inversion_recursion(p->next,head);
p->next->next=p;//反轉節點
p->next=null;//第乙個節點反轉後其後繼應該為null
}
非遞迴實現很簡單,只需要遍歷一遍鍊錶,在遍歷過程中,把遍歷的節點一次插入到頭部。在這個過程之後,第乙個節點成了最後節點,因此要特殊處理,改其後繼為null
[cpp]view plain
copy
void inversion(listnode* head)
while(current!=null)
} 測試**:
[cpp]view plain
copy
#include
#include
typedef
struct listnodelistnode;
int main()
inversion_recursion(head->next,head);
inversion(head);
tmp=head->next;
while(1)
}
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟2 其中注意,鍊錶是以節點後繼為null...
單鏈表反轉遞迴與非遞迴演算法
1.如下 1 include 2 include 3 4using namespace std 56 struct node 715 16 17 node createlist int elem,int length 1825 return p 26 27 28void destroylist no...
面試題 單鏈表反轉 遞迴和非遞迴
include include typedef struct node node,linklist 一般反轉 linklist reverse linklist head node pre,cur,next pre head cur head next while cur head next nul...