面試題16:反轉鏈表

題目:定義一個函數,輸入一個鏈表的頭結點,反轉該鏈表並輸出反轉後鏈表的頭結點。

思想:從頭開始調整鏈表的指向,將當前節點指向下一個節點的指針,改爲指向前一個節點。從頭結點開始,頭結點的前一個節點爲null。

java實現:(非遞歸)

public static ListNode reverseList(ListNode head) {
		if(head==null) return null;
		ListNode preNode=null;
		ListNode node=head;//當前節點
		//ListNode nextNode=node.next;
		ListNode reverseHead=null;//轉變後的頭結點
		while(node!=null) {
			ListNode nextNode=node.next;
			if(nextNode==null) {
				reverseHead=node;
				//return reverseHead;
			}
			node.next=preNode;
			preNode=node;
			node=nextNode;
			//nextNode=nextNode.next;
		}
		return reverseHead;
	}

遞歸:先遞歸訪問到最後一個節點作爲頭結點,然後向前更改指針指向。

public static ListNode reverseList(ListNode head) {
		if(head==null) return null;
		ListNode preNode=null;
		ListNode node=head;//當前節點
		//ListNode nextNode=node.next;
		ListNode reverseHead=null;//轉變後的頭結點
		while(node!=null) {
			ListNode nextNode=node.next;
			if(nextNode==null) {
				reverseHead=node;
				//return reverseHead;
			}
			node.next=preNode;
			preNode=node;
			node=nextNode;
			//nextNode=nextNode.next;
		}
		return reverseHead;
	}

發佈了34 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章