1. 程式人生 > >單鏈表反轉的迭代和遞迴解法

單鏈表反轉的迭代和遞迴解法

單鏈表反轉的迭代和遞迴解法

迭代

  1. 定義三個指標pnow,pre,pnex;
  2. pnow指向head,pre,pnex指向空(把pre定義為空的好處,不用把頭結點特殊處理)
  3. 迴圈體內:
    1、把pnex指向pnow的next
    2、判斷是否為空,若為空則pnow為尾結點(只為了標記尾結點)
    3、反轉指標: pnow->next = pre;
    4、後移指標: pre = pnow;pnow = pnext;
    5、當pnow指向NULL時,退出迴圈,並返回尾結點
Node * reverseList(List head){
    Node *pnow = head;
    Node *pre = NULL;
    Node *pnext = NULL;
    //定義用來標記尾指標
    Node *tail = NULL;
    while(pnow != NULL){
        pnext = pnow->next;
        if(pnext == NULL){
            tail = pnow;
        }
        pnow->next = pre;
        pre = pnow;
        pnow = pnext;
    }
    return tail;
}

遞迴

Node * reverseList(List head)
{
    //如果連結串列為空或者連結串列中只有一個元素
    if(head == NULL || head->next == NULL)
    {
        return head;
    }
    else
    {
        //先反轉後面的連結串列,走到連結串列的末端結點
        Node *newhead = reverseList(head->next);
        //再將當前節點設定為後面節點的後續節點
        head->next->next = head;
        head->next = NULL;
        
        return newhead;
    }
}

感謝博主dashuai,原博:
[1]:https://www.cnblogs.com/kubixuesheng/p/4394509.html