單鏈表逆序

2021-06-04 15:44:18 字數 1294 閱讀 3529

#include #include typedef struct student

student;typedef struct list list,*list;

list *createlist ();

void paixu(list l);//比較笨拙的一種方法

list *reverse(list l);

int main()

//paixu(p);

reverse(p);

q = p->next;

printf("排序結果:\n");

while(q!=null)

}list *createlist ()

p->next = null;

return ph;

}void paixu(list l)

p = q;

printf("\nlen = %d\n",len);

for(;inext;

}temp = p->a;

p->a = q->a;

q->a = temp;

p = p->next;

q = p;

}}list *reverse(list l)

//printf("p1 = %d,next = %d\n ",p1->number,p1->next->number);

l->next=p1;                           //將煉表頭節點指向p1

return l;

}

list *reverse(list l)
分析:

假設需要逆序的單鏈表為:

則逆序以後的鍊錶為:

過程:(1)取p1指向header->next 

p1=stu->next;

p2保留p1->next 

p2=p1->next;

將p1->next置為null,因為單鏈表逆序以後,當前的p1節點為尾節點 

p1->next=null;

(2)取p3保留p2->next 

p3=p2->next;

將p2插入p1之前 

p2->next = p1;

p1指向p2指向的節點  

p1=p2;

p2指向p3指向的節點 

p2=p3;

迴圈一次修改以後的單鏈表如下:

(3)重複步驟(2)

迴圈一次修改以後的單鏈表如下:

(4)將header->next指向p1,完成整個單鏈表的逆序

單鏈表逆序

第二個題目是很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個...

單鏈表逆序

很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈的思想來分析這個問題,鍊錶的...

單鏈表逆序

2 單鏈表逆序 第二個題目是很經典的 單鏈表逆序 問題。很多公司的面試題庫中都有這道題,有的公司明確題目要求不能使用額外的節點儲存空間,有的沒有明確說明,但是如果面試者使用了額外的節點儲存空間做中轉,會得到乙個比較低的分數。如何在不使用額外儲存節點的情況下使乙個單鏈表的所有節點逆序?我們先用迭代迴圈...