链表不按照线性的顺序存储数据,而是由若干同一个结构类型的“结点”依次串接而成的,结点由数据部分和下一个结点的地址部分组成。当结点只包含其后继结点的信息的链表称做单链表,如下图所示,head存放链表首结点的地址,rear指向链表表尾。
class Node < T > {
public Node< T > next = null ;
public T data;
public Node ( T data) {
this . data = data;
}
}
public class MyLinkedList < T > {
public Node< T > head = null ;
public Node< T > rear = null ;
public void addNode ( T d) {
Node< T > newNode = new Node < > ( d) ;
if ( head == null ) {
head = newNode;
rear = head;
return ;
}
rear. next = newNode;
rear= newNode;
}
public Boolean deleteNode ( int index) {
if ( index == 1 ) {
head = head. next;
return true ;
}
int i= 2 ;
Node< T > preNode = head;
Node< T > curNode = preNode. next;
while ( curNode!= null ) {
if ( i== index) {
preNode. next= curNode. next;
return true ;
}
preNode = curNode;
curNode = curNode. next;
i++ ;
}
return false ;
}
public boolean insertNode ( int index, T n) {
Node< T > p = new Node < > ( n) ;
if ( index == 1 ) {
p. next = head;
head = p;
return true ;
}
int i= 2 ;
Node< T > curNode = head;
while ( curNode!= null ) {
if ( i== index) {
p. next = curNode. next;
curNode. next = p;
return true ;
}
curNode = curNode. next;
i++ ;
}
return false ;
}
public int length ( ) {
int length= 0 ;
Node< T > tmp= head;
while ( tmp!= null ) {
length ++ ;
tmp= tmp. next;
}
return length;
}
public void printList ( ) {
Node< T > tmp = head;
while ( tmp!= null ) {
System. out. print ( tmp. data+ " " ) ;
tmp= tmp. next;
}
System. out. println ( ) ;
}
public static void main ( String[ ] args) {
MyLinkedList< Integer> list = new MyLinkedList < > ( ) ;
list. addNode ( 2 ) ;
list. addNode ( 5 ) ;
list. addNode ( 6 ) ;
list. addNode ( 3 ) ;
list. addNode ( 5 ) ;
list. addNode ( 4 ) ;
System. out. println ( "listLen=" + list. length ( ) ) ;
list. printList ( ) ;
boolean flag1= list. insertNode ( 1 , 9 ) ;
System. out. println ( flag1) ;
System. out. println ( "listLen=" + list. length ( ) ) ;
list. printList ( ) ;
boolean flag2 = list. deleteNode ( 7 ) ;
System. out. println ( flag2) ;
list. printList ( ) ;
System. out. println ( "listLen=" + list. length ( ) ) ;
}
}
输出
listLen=6
2 5 6 3 5 4
true
listLen=7
9 2 5 6 3 5 4
true
9 2 5 6 3 5
listLen=6