編寫算法將帶頭節點的單鏈表就地逆置


LinkList  Reverse_1(LinkList  L) {    //傳入鏈表的頭結點
  LNode *p, *r;    //p為工作指針,r為p的后繼,以防斷鏈
  p = L->next;    //從第一個元素節點開始
   L->next = NULL;    //先將L的next域置為NULL
  while(p! = NULL) {
    r=p->next;        // 暫存p的后繼
    /* 后兩句語句就是頭插法建立單鏈表的操作*/
    p->next = L->next;
    L->next  = p;
    p = r;        //更新指針p,遍歷整個單鏈表
  }
  return L;
}

 

 

解法2

LinkList  Reverse_2(LinkList L){
//依次遍歷線性表,並將結點指針反轉
  LNode *pre, *p=L->next, *r=p->next;
  p->next = NULL;  //處理第一個結點  鏈表反轉后,第一個結點變為最后一個結點,其next域為NULL
  while(r!= NULL){
   /* 后三句依次更新指針,遍歷單鏈表*/
    pre = p;
    p = r;
    r = r->next;
    p->next = pre;       //反轉指針
  }
  L->next = p;      //處理最后一個結點,鏈表反轉后,最后一個結點變為第一個結點,L->next要指向其
  return L;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM