1. 程式人生 > >LeetCode--206.反轉連結串列

LeetCode--206.反轉連結串列

單鏈表反轉的實現

在這裡插入圖片描述
作為一道經典的面試題,連結串列反轉說起來容易,真正要寫出程式碼還是有一點難度(對於新手),在試錯了好幾次後,總算是磕磕絆絆的寫出來了,下面將程式碼的思路記錄下來。
連結串列程式碼如下:

  // Definition for singly-linked list.
  public class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
  }

迭代法:

遍歷舊連結串列的節點,並依次新增到新連結串列的頭部。

class Solution {
	public
ListNode reverseList(ListNode head) { // 建立新的連結串列用來儲存舊連結串列節點 ListNode newNode = null; while (head != null) { // 建立一個臨時節點記錄當前節點的下一個節點 ListNode tempNode = head.next; // 第一次:第一個節點指向null,第二次:第二個節點指向第一個節點,以此類推 head.next = newNode ; // 將head賦值給newNode,此時newNode就是新連結串列的頭結點 newNode = head; // 將臨時節點(下一個節點)賦值給head,繼續進行遍歷
head = tempNode; } return newNode; } }

遞迴法:

class Solution{
	public ListNode reverseList(ListNode head){
		// 遞迴終止條件
		if(head == null || head.next == null){
			return head;
		} 
		// 遞迴
		ListNode newNode = reverseList(head.next);
		// 讓後一個節點指向當前節點
		head.next.next = head;
		// 當前節點指向null,避免形成環
head.next = null; return newNode; } }