问腿描述:
利用java实现双链表。
代码如下:
表接口定义:
public interface Xlistinterface {
void add(Object element);//增加元素
void delete(int index);//删除元素
void delete(Object element);
boolean check(Object element);//查找元素
int at(Object element);//查找元素下标
void update(int index,Object element);//修改元素
}
节点定义:
public class ListNode {//节点
//链表实现
Object date;
ListNode next;
ListNode pre;
public ListNode(Object date) {//构造器
this.date = date;
}
}
双链表的具体实现:(利用哑元)``
public class Doublelist implements Xlistinterface {
private ListNode first;//头指针
private ListNode last;//尾指针
private int size=0;//长度
public Doublelist() {//构造器 用于建立哑元
first=new ListNode(null);
last=new ListNode(null);
first.next=last;
last.pre=first;
}
@Override
public void add(Object element) {
ListNode p=new ListNode(element);
last.pre.next=p;
p.pre=last.pre;
last.pre=p;
p.next=last;
size++;
}
@Override
public void delete(int index) {
int i=0;
ListNode p=first.next;
while (p!=last)
{
if (i==index)
{
p.next.pre=p.pre;
p.pre.next=p.next;
size--;
break;
}
}
}
@Override
public void delete(Object element) {
ListNode p=first.next;
while (p!=last)
{
if (p.date.equals(element))
{
p.next.pre=p.pre;
p.pre.next=p.next;
size--;
break;
}
}
}
@Override
public boolean check(Object element) {
ListNode p=first.next;
while (p!=last)
{
if (p.date.equals(element))
{
return true;
}
}
return false;
}
@Override
public int at(Object element) {
int i = 0;
ListNode p = first.next;
while (p != last) {
if (p.date.equals(element))
{
return i;
}
else
{
p = p.next;
i++;
}
}
return -1;
}
@Override
public void update(int index, Object element) {
int i = 0;
ListNode p = first.next;
while (p != last) {
if (i==index)
{
p.date=element;
}
else
{
p = p.next;
i++;
}
}
}
@Override
public String toString() {
StringBuilder ss=new StringBuilder();
ListNode p=first.next;
while (p!=last)
{
ss.append(p.date);
p=p.next;
if (p!=last)
ss.append(",");
}
return ss.toString();
}
}
可以利用测试类进行相应的测试。