java 反轉單連結串列,偶爾會遇到的面試題

guile發表於2019-03-04

java 反轉單連結串列,偶爾會遇到的面試題。存手機裡,再去面試,萬一碰上就用到了。

// 單連結串列類 --- 新增元素,反轉單連結串列,列印所有元素
public class LinkedList{
	// 頭結點
	public Element header = null;

	//
	public LinkedList() {    }

	/**
	 * 新增元素
	 */
	void insertList(Object obj){
		Element ele = new Element();
		ele.value = obj;

		if(header == null){   // 第一次插入元素
			header = ele;
		}else{    // 不是第一次插入元素
			Element temp = header;

			while(temp.next != null){  // 獲得最後一個元素
				temp = temp.next;
			}

			temp.next = ele;
		}
	}

	/**
	 * 列印連結串列
	 */
	void print(){
		StringBuffer sb = new StringBuffer();

		sb.append("列印連結串列:");

		Element temp = header;

		while(temp != null){
			sb.append(temp.value);
			sb.append(" ");

			temp = temp.next;
		}

		System.out.println(sb);
	}

	// 反轉單連結串列
	public void reverseList(){
		Element now = header;        // 定義 now 指向 header
		Element prev = null;         // 定義前一個結點

		while(now != null){
			Element next = now.next;  // 定義 next 指向 now 的下一個結點

			now.next = prev;  // 修改 now 指向  prev
			prev = now;       // 將 now 結點複製給 prev
			now = next;       // 將 now 的下一個結點 next 複製給 now
		}

		header = prev;
	}

	// main
	public static void main(String[] a){
		LinkedList lList = new LinkedList();

		lList.insertList(1);
		lList.insertList(2);
		lList.insertList(3);
		lList.insertList(4);
		lList.insertList(5);

		lList.print();

                // 反轉單連結串列
		lList.reverseList();

		lList.print();
	}
}

// 節點類
class Element{
	public Object value = null;
	public Element next = null;
}

 

 

相關文章