struct node
{
int info;
struct node *next;
};
typedef struct node node;
void *printRev(node *head){
int count=0;
int i;
node *beforeFin;
node *tempHead;
tempHead = head;
while(tempHead->next != NULL){
count++;
tempHead->next = tempHead->next->next; //LAST ITERATION SHOULD BE AT THE END OF LIST
}
printf("COUNT IS: %d\n", count);
for(i = 0; i <= count; i++){
beforeFin = Prev(head, tempHead->next);
printf("%d", beforeFin->info);
}
printf("\n");
}
,現在這一打印出:如何以相反的順序打印單鏈表?
COUNT IS: 3
Segmentation fault (core dumped)
Prev
給定的指針之前返回一個指針到節點(tempHead->next
)我的意思是這個以相反的順序使用打印出單鏈表for循環上面。因此給定節點的->info
應該在下面的例子中返回5(在第一次迭代之後)。
在打印計數的printf
之前,tempHead->next
應指向最終節點。
現在我傳遞2 3 5 4
,這是給我的4 ID前面的計數像這樣打印出來4 5 3 2
我將不勝感激給予任何幫助,我是一個初學者,你也許能夠告訴。謝謝大家!
我可以做到這一點使用遞歸,但我想學習弄清楚這種方法。
你不能在單次循環相反的方式進行打印。 –
@SteveYonG哦,是的,他可以。他將不得不使用堆棧。如果考慮如何加載調用幀,遞歸本質上是使用堆棧。 –
您知道這將以O(N * N)運行,因爲您對前一個節點的搜索只能從列表頭部開始?更好的方法是將列表顛倒(如果允許破壞性操作,可以在沒有空間開銷的情況下完成)。然後你可以實現線性運行時。 –