首页 > 代码库 > 拿java写了一个有点像指针的单链表
拿java写了一个有点像指针的单链表
public class LinkList {
private Node firstNode;
private Integer position;
public LinkList() {
super();
}
public LinkList(Node firstNode) {
super();
this.firstNode = firstNode;
}
public Node getFirstNode() {
return firstNode;
}
public void setFirstNode(Node firstNode) {
this.firstNode = firstNode;
}
public Integer getPosition() {
return position;
}
public void setPosition(Integer position) {
this.position = position;
}
/**
* 无位置参数:在链表的末尾添加
*
* @param node
* @return
*/
public LinkList add(Node node) {
// 从头结点开始,依次找下去知道为空为止
Node currentNode = this.firstNode;
if (firstNode.getNextNode() == null) {
node.setPriorNode(firstNode);
firstNode.setNextNode(node);
return this;
}
while (currentNode.getNextNode() != null) {
currentNode = currentNode.getNextNode();
}
currentNode.setNextNode(node);
currentNode.getPriorNode().setNextNode(currentNode);
node.setPriorNode(currentNode);
return this;
}
/**
* 在指定位置添加节点
*
* @param node
* @param position
* @return
*/
public boolean add(Node node, int position) {
int count = 0;
Node currentNode = this.firstNode;
if (position == 1) {
if (firstNode.getNextNode() == null) {
node.setPriorNode(firstNode);
firstNode.setNextNode(node);
return true;
}
node.setNextNode(firstNode.getNextNode());
node.setPriorNode(firstNode);
firstNode.setNextNode(node);
return true;
}
while (count < position) {
if (currentNode.getNextNode() == null) {
if (count == position - 1) {
add(node);
return true;
}
return false;
}
currentNode = currentNode.getNextNode();
count++;
}
currentNode.getPriorNode().setNextNode(node);
node.setPriorNode(currentNode.getPriorNode());
node.setNextNode(currentNode);
currentNode.setPriorNode(node);
node.setPriorNode(currentNode);
return true;
}
/**
* 移除指定位置的node
*
* @param position
* @return
*/
public boolean remove(int position) {
Node canditate = find(position);
if (canditate != null && canditate.getNextNode() != null) {
canditate.getPriorNode().setNextNode(canditate.getNextNode());
canditate.getNextNode().setPriorNode(canditate.getPriorNode());
} else if (canditate != null && canditate.getNextNode() == null) {
canditate.getPriorNode().setNextNode(null);
} else {
return false;
}
return true;
}
/**
* 根据指定位置查找node
*
* @param position
* @return
*/
public Node find(int position) {
int count = 0;
Node node = this.firstNode;
while (count < position) {
if (node.getNextNode() != null) {
node = node.getNextNode();
}
if (node.getNextNode() == null && count < position - 1) {
return null;
}
count++;
}
return node;
}
/**
* 根据位置更新node信息
*
* @param newvalue
* @param position
* @return
*/
public boolean update(String newvalue, int position) {
Node canditate = find(position);
if (canditate != null) {
canditate.setNodevalue(newvalue);
} else {
return false;
}
return true;
}
}
package projectlinklist;
/**
*实体类
*nodevalue为节点的值
*nextNode为下一个节点
*/
public class Node {
private Node priorNode;
public Node getPriorNode() {
return priorNode;
}
public void setPriorNode(Node priorNode) {
this.priorNode = priorNode;
}
private String nodevalue;
private Node nextNode;
public String getNodevalue() {
return nodevalue;
}
public Node(String nodevalue) {
super();
this.nodevalue = http://www.mamicode.com/nodevalue;
}
public Node() {
super();
}
public void setNodevalue(String nodevalue) {
this.nodevalue = http://www.mamicode.com/nodevalue;
}
public Node getNextNode() {
return nextNode;
}
public void setNextNode(Node nextNode) {
this.nextNode = nextNode;
}
}
拿java写了一个有点像指针的单链表