单向链表
结点中有一个元素以及指向下一个结点的指针
public class Node<E> {//相当于一个结构体
//元素
E element;
//指向下一个结点
Node<E> next;
}
对链表进行增删改查
public class link<E> {
//创建一个头节点和一个尾结点
Node<E> head =new Node<E>();
Node<E> tail =head;
//单向链表和双向链表
public void add(E e){
tail.next=new Node<E>();
tail.next.element=e;
tail=tail.next;
System.out.println("成功添加:"+e);
}
public void delete(E e){
Node<E> a =head;
while(a!=tail){
if(a.next.element.equals(e)){
if(a.next==tail){
tail=a;
}
else{
a.next=a.next.next;
}
System.out.println("成功删除:"+e);
}
else{
a=a.next;
}
}
}
public void replace(E e1,E e2){
Node<E> a =head;
while(a!=tail){
if(a.next.element.equals(e1)){
a.next.element=e2;
System.out.println("成功替换:"+e1+"为:"+e2);
}
else{
a=a.next;
}
}
}
public void show(){
Node<E> a =head;
while(a!=tail){
System.out.println(a.next.element);
a=a.next;
}
}
}
开始的时候设置一个头节点和一个尾结点,头节点为空,当我们添加一个结点的时候,直接添加到尾结点后面,然后将尾结点指向这个结点。当我们删除一个结点的时候,需要判断是否为尾结点,如果是的话,就把尾结点指向前一个结点即可,如果不是那么需要将当前结点的下一个结点指向下下个结点。
双向链表
双向链表中有一个指向下一个结点的指针和一个指向上一个结点的指针。
public class Node<E> {//相当于一个结构体
//元素
E element;
//指向下一个结点
Node<E> next;
Node<E> last;
}
双向链表的增删改查和单向链表的不同之处在于添加删除的时候需要修改指向上一个结点的指向。
public class link<E> {
//创建一个头节点和一个尾结点
Node<E> head =new Node<E>();
Node<E> tail =head;
//单向链表和双向链表
public void add(E e){
tail.next=new Node<E>();
tail.next.element=e;
tail.next.last=tail;
tail=tail.next;
System.out.println("成功添加:"+e);
}
public void delete(E e){
Node<E> a =head;
while(a!=tail){
if(a.next.element.equals(e)){
if(a.next==tail){
tail=a;
}
else{
a.next=a.next.next;
a.next.last=a;
}
System.out.println("成功删除:"+e);
}
else{
a=a.next;
}
}
}
public void replace(E e1,E e2){
Node<E> a =head;
while(a!=tail){
if(a.next.element.equals(e1)){
a.next.element=e2;
System.out.println("成功替换:"+e1+"为:"+e2);
}
else{
a=a.next;
}
}
}
public void show(){
Node<E> a =head;
while(a!=tail){
System.out.println(a.next.element);
a=a.next;
}
}
public void show1(){
Node<E> a =tail;
System.out.println("逆序");
while(a!=head){
System.out.println(a.element);
a=a.last;
}
}
}