首頁  >  文章  >  Java  >  鍊錶常用操作-反轉詳解

鍊錶常用操作-反轉詳解

零下一度
零下一度原創
2017-07-19 13:40:502038瀏覽

鍊錶常用操作-反轉

我們先定義一個單鍊錶的節點類別

public class ListNode {2         
int val;3         ListNode next = null;// 指向的下个节点4 5         
ListNode(int val) {6             this.val = val;7         }8     
}

 

實作單鍊錶反轉共有兩種方法

1、使用遞迴,從後往前反轉。從頭結點開始,往後尋找直到找到尾節點為止,然後開始反轉。  

 1     public ListNode reverseList(ListNode head) { 2         
 if (head == null || head.next == null) 3             return head; 4  5         
 ListNode prev = reverseList(head.next);// 递归调用,先反转下个节点 6  7         
 head.next.next = head;// 将当前结点的指针域指向前一结点 8         
 head.next = null;// 前一结点的指针域令为null; 9         
 return prev;// 反转后新链表的头结点10     
 }

 

2、使用遍歷,從前往後反轉。先儲存下個節點,然後將目前節點指向前個節點,然後在將節點向下移動繼續循環進行下次反轉。

 1     public ListNode reverseList(ListNode head) { 2         if (head == null) { 3             
 return null; 4         } 5         ListNode pre = null; 6         
 ListNode next = null; 7         while (head != null) { 8             
 // 保存下个节点,防止丢失 9             next = head.next;10             
 // 将他的下个节点指向前个节点11             head.next = pre;12 13             
 // head指向pre后,就继续依次反转下个节点14             
 // 让pre,head依次向后移动一个节点,继续下一次的反转15             
 pre = head;16             head = next;17         }18         
 return pre;19     
 }

剛做完線上編程,就隨手記錄下來,方便日後查看。

以上是鍊錶常用操作-反轉詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn