java 反转单链表,偶尔会遇到的面试题

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;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值