数据结构之链表的java实现

package com.cb.java.algorithms.datastructure.yanweimindatastructure.linklist;


/**
 * 单链表
 * 
 * @author 36184
 *
 */
public class LinkList {
private LinkNode first; // 头指针,指向第一个节点。头节点没有数据项


public LinkList() {
this.first = null; // 新建空节点
}


/**
* 往链表头部插入一个节点

* @param node
*/
public void insertFirst(LinkNode node) {
node.next = first; // 头节点和新增节点的下一个节点都指向原来头节点的下一个节点
first = node; // 头节点指向新增节点
}


/**
* 从链表中删除第一个节点

* @return
*/
public LinkNode deleteFirst() {
LinkNode temp = first.next;
first = first.next;
return temp;
}


/**
* 根据关键字查找指定节点

* @param
* @return
*/
public LinkNode find(int iData, double dData) {
LinkNode current = first;
while (current.iData != iData || current.dData != dData) {
if (current.next == null)
return null;
else {
current = current.next;
}
}
return current;
}


/**
* 根据关键字删除指定节点

* @param iData
* @param dData
* @return
*/
public LinkNode delete(int iData, double dData) {
LinkNode current = first;
LinkNode previous = first;
while (current.iData != iData || current.dData != dData) {
if (current.next == null) {
return null;
} else {
previous = current;
current = current.next;
}
}
if (current == first) {
first = first.next;
} else {
previous.next = current.next;
}
return current;
}


/**
* 根据关键字查找结点并在该节点后面插入一个新的节点

* @param iData
* @param dData
*/
public void insertAfter(int iData, double dData, int newIData, double newDData) {
LinkNode current = first;
while (current.iData != iData || current.dData != dData) {
if (current.next == null)
return;
else {
current = current.next;
}
}
LinkNode newNode=new LinkNode(newIData, newDData);
newNode.next=current.next;
current.next=newNode;
}


/**
* 判断链表是否为空,如果头节点的下一个节点为空,则该链表为空

* @return
*/
public boolean isEmpty() {
return this.first == null;
}


/**
* 打印列表元素
*/
public void display() {
LinkNode current = first;
while (current != null) {
current.display();
current = current.next;
}
}
}

猜你喜欢

转载自blog.csdn.net/u013230189/article/details/80664997