#include #include typedef struct _node
node, *linklist;
//一般反轉
linklist reverse(linklist &head)
node *pre, *cur, *next;
pre = head;
cur = head->next;
while(cur)
head->next = null;
head = pre;
return head;
}//遞迴反轉
//注意最後返回值的next域置null
linklist rreverse(linklist p, linklist &head)
else
}bool createlist(linklist &head, const int *data, const int len)
cur->data = data[0];
cur->next = null;
head = cur;
for(i=1; idata = data[i];
next->next = null;
cur->next = next;
cur = cur->next;
} return true; }
void printlist(linklist head) }
void main( void )
; int len = sizeof(data)/sizeof(int);
linklist head;
if( !createlist(head, data, len) )
printf("反轉前:");
printlist(head);
printf("\n");
reverse(head);
printf("反轉後:");
printlist(head);
printf("\n");
linklist tail = rreverse(head, head);
tail->next = null;
//沒有這條語句,則反轉後的最後兩個節點會形成環
printf("二次反轉後:");
printlist(head);
printf("\n");
}
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 cpp view plain copy typedef struct listnodelistnode 在遞迴演算法中的做法是 1找到最後乙個節點和倒數第二個節點,把最後乙個節點設為頭節點的後繼 2反轉這兩個節點 3倒數第三個和第四個節點重複執行步驟...
單鏈表反轉(遞迴和非遞迴)
單鏈表反轉有遞迴和非遞迴兩種演算法。下面定義節點 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...