说明
运行时间O(N)
 首先,弄一个简单的单链表,包括
- 首尾节点、大小
- add()、show()、Node静态内置类
然后,添加reverse(),实现反转功能
 最后,写测试方法,@Test调用
<mark>其中,reverse的实现思路为:</mark>
 (转向操作)
- 创建 indexNodeNextShould,指向上一个节点的信息
- 创建 indexNextNode ,指向下一个节点的信息
- 当前节点连接 indexNodeNextShould
(为下次循环做准备)
- indexNodeNextShould指向 当前节点作为上一个节点
- 当前节点指向 indexNextNode (当前节点后移)
代码实现
简单的单链表
package cn.edut.test;
import org.junit.Test;
public class MySingleLinkedList<T> {
	private Node<T> first ; 
	private Node<T> last ; 
	private int size;
	public boolean add(T e) {
		if(first==null) 
		{//第一元素添加
			first =new Node<T>(e,null);
			last = first;
		}else 
		{ //非第一次
			last.next = new Node<T>(e, null);
			last = last.next;
		}
		size++;
		return true;
	}
	
	public void show() {
		System.out.print("[");
		Node<T> next = first; 
		for(int index=0 ; index<size-1 ; index++) {
			System.out.print(next.elementDate+", ");
			next = next.next;
		}
		System.out.println(last.elementDate+"]");
	} 
	
	private static class Node<T>{
		private Node<T> next ;
		private T elementDate  ;
		public  Node(T e ,  Node<T> nex) {
			this.elementDate = e ; 
			this.next = nex;
		}
	}
}
reverse()
public void reverse() {
		//没初始化,只有一个值
		if(first==null||first==last) 
		{
			return ;
		}
		//记录当前操作节点
		Node<T> indexNode = first;
		//存储上一个节点
		Node<T> indexNodeNextShould = null;
		while(true) {
			//记录下一节点
			Node<T> indexNextNode = indexNode.next;
			//当前节点的next==上一个节点
			indexNode.next = indexNodeNextShould ;
			//存储上一个节点记录往后移
			indexNodeNextShould = indexNode;
			
			if(indexNode == last) {
				break;
			}else {
				//操作节点后移
				indexNode = indexNextNode;
			}
		}
		//首尾节点指向调转
		Node<T> temp = last;
		last = first ; 
		first = temp ;
	}
@Test调用
/** * 测试 创建、add、清除、reverse、Iterator */
	@Test
	public void test01() {
		//弄几个数据进去
		MySingleLinkedList<Integer> mll = new MySingleLinkedList<Integer>();
		while(mll.size<10) {
			mll.add(mll.size);
		}
		System.out.print("调转前:");mll.show();
		//数据调转
		mll.reverse();
		System.out.print("调转后:");mll.show();
	}
完整代码
package cn.edut.test;
import org.junit.Test;
public class MySingleLinkedList<T> {
	
	/** * 测试 创建、add、清除、reverse、Iterator */
	@Test
	public void test01() {
		//弄几个数据进去
		MySingleLinkedList<Integer> mll = new MySingleLinkedList<Integer>();
		while(mll.size<10) {
			mll.add(mll.size);
		}
		System.out.print("调转前:");mll.show();
		//数据调转
		mll.reverse();
		System.out.print("调转后:");mll.show();
	}
	
	
	private Node<T> first ; 
	private Node<T> last ; 
	private int size;
	
	public boolean add(T e) {
		if(first==null) 
		{//第一元素添加
			first =new Node<T>(e,null);
			last = first;
		}else 
		{ //非第一次
			last.next = new Node<T>(e, null);
			last = last.next;
		}
		size++;
		return true;
	}
	
	public void show() {
		System.out.print("[");
		Node<T> next = first; 
		for(int index=0 ; index<size-1 ; index++) {
			System.out.print(next.elementDate+", ");
			next = next.next;
		}
		System.out.println(last.elementDate+"]");
	} 
	
	private static class Node<T>{
		private Node<T> next ;
		private T elementDate  ;
		public  Node(T e ,  Node<T> nex) {
			this.elementDate = e ; 
			this.next = nex;
		}
	}
	
	public void reverse() {
		//没初始化,只有一个值
		if(first==null||first==last) 
		{
			return ;
		}
		//记录当前操作节点
		Node<T> indexNode = first;
		//存储上一个节点
		Node<T> indexNodeNextShould = null;
		while(true) {
			//记录下一节点
			Node<T> indexNextNode = indexNode.next;
			//当前节点的next==上一个节点
			indexNode.next = indexNodeNextShould ;
			//存储上一个节点记录往后移
			indexNodeNextShould = indexNode;
			
			if(indexNode == last) {
				break;
			}else {
				//操作节点后移
				indexNode = indexNextNode;
			}
		}
		//首尾节点指向调转
		Node<T> temp = last;
		last = first ; 
		first = temp ;
	}
}

 京公网安备 11010502036488号
京公网安备 11010502036488号