单向链表
单向链表的数据反转方法
import org.junit.Before;
import org.junit.Test;
import model.LinkNode;
/**
* 单向链表反转
* @author Cheng.Wei
* @date 2018年7月30日
*/
public class LinkNodeTest {
LinkNode linkNode = new LinkNode();
@Before
public void add() {
linkNode.setId(1);
linkNode.setName("一级");
linkNode.setNext(
new LinkNode(2, "二级",
new LinkNode(3, "三级",
new LinkNode(4,"四级", null))));
}
@Test
public void go() {
System.out.println("初始: "+linkNode.toString());
linkNode = reverse( linkNode);
System.out.println("反转: "+linkNode);
}
/**
* 反转
* @param linkNode
* @return
*/
public LinkNode reverse(LinkNode linkNode) {
if(linkNode!=null && linkNode.getNext()!=null) {
//找出的最深节点
LinkNode node = reverse(linkNode.getNext());
linkNode.getNext().setNext(linkNode);
linkNode.setNext(null);
return node;
}
return linkNode;
}
}
执行结果
初始: LinkNode [id=1, name=一级, next=LinkNode [id=2, name=二级, next=LinkNode [id=3, name=三级, next=LinkNode [id=4, name=四级, next=null]]]]
反转: LinkNode [id=4, name=四级, next=LinkNode [id=3, name=三级, next=LinkNode [id=2, name=二级, next=LinkNode [id=1, name=一级, next=null]]]]
链表数据模型
/**
* @author Cheng.Wei
* @date 2018年7月30日
*/
public class LinkNode {
/**PK_*/
private int id;
/**名称*/
private String name;
/**下一节点*/
private LinkNode next;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
/**
*
*/
public LinkNode() {
super();
}
/**
* @param id
* @param pid
* @param name
* @param child
*/
public LinkNode(int id, String name, LinkNode next) {
super();
this.id = id;
this.name = name;
this.next = next;
}
@Override
public String toString() {
return "LinkNode [id=" + id + ", name=" + name + ", next=" + next + "]";
}
}