單鏈表反轉的迭代和遞迴解法
阿新 • • 發佈:2018-12-28
單鏈表反轉的迭代和遞迴解法
迭代
- 定義三個指標pnow,pre,pnex;
- pnow指向head,pre,pnex指向空(把pre定義為空的好處,不用把頭結點特殊處理)
- 迴圈體內:
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