單鏈表逆序作為常見的資料操作,具體實現有不同的版本,但是總歸需要考慮輸入結點為空、乙個結點和多個結點的情況。
該逆序思想來自《劍指offer》;另外乙個容易想到的逆序方式是,申請乙個頭結點head,然後把待逆序結點順序插入到頭結點後head->next,最後返回head->next即可。
#include #include typedef struct node node;
node* create_list(int *array,const int length)
if(length<=0)
node *head = (node*)malloc(sizeof(node));
head->data = array[0];
head->next = null;
node *p ,*q = head;
for(int i=1;idata = array[i];
q->next = p;
q = p;
} q->next = null;
return head;
}node *reverse(node *head)
cur = head->next;
prev = head;
prev->next = null; //頭結點變尾結點,next置空
while(cur!=null)
return prev;
}void print(node *head)
}int main(void)
; const int len = sizeof(a)/sizeof(int);
node *head = create_list(a,len);
print(head);
printf("\n");
node *rev = reverse(head);
print(rev);
printf("\n");
return 0;
}
單鏈表逆序
include include typedef struct student student typedef struct list list,list list createlist void paixu list l 比較笨拙的一種方法 list reverse list l int main ...
單鏈表逆序
第二個題目是很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個...
單鏈表逆序
很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個問題,鍊錶的...