实现单向链表(不带傀儡节点)代码.
public class Test {
public static void main ( String [ ] args) {
MyLinkedList myLinkedList = new MyLinkedList ( ) ;
myLinkedList. createLinkedList ( ) ;
myLinkedList. show ( ) ;
System . out. println ( myLinkedList. getSize ( ) ) ;
myLinkedList. addFirst ( 11 ) ;
myLinkedList. show ( ) ;
myLinkedList. addLast ( 77 ) ;
myLinkedList. show ( ) ;
myLinkedList. addIndex ( 2 , 100 ) ;
myLinkedList. show ( ) ;
System . out. println ( myLinkedList. contains ( 77 ) ) ;
myLinkedList. remove ( 100 ) ;
myLinkedList. show ( ) ;
myLinkedList. removeAllKey ( 23 ) ;
myLinkedList. show ( ) ;
myLinkedList. clear ( ) ;
myLinkedList. show ( ) ;
}
}
class Node {
public int val;
public Node next;
public Node ( int val) {
this . val = val;
}
}
public class MyLinkedList {
public Node head;
public void createLinkedList ( ) {
Node node1 = new Node ( 23 ) ;
Node node2 = new Node ( 23 ) ;
Node node3 = new Node ( 45 ) ;
Node node4 = new Node ( 66 ) ;
Node node5 = new Node ( 67 ) ;
node1. next = node2;
node2. next = node3;
node3. next = node4;
node4. next = node5;
this . head = node1;
}
public void show ( ) {
Node cur = this . head;
while ( cur != null ) {
System . out. print ( cur. val+ " " ) ;
cur = cur. next;
}
System . out. println ( " " ) ;
}
public int getSize ( ) {
Node cur = this . head;
int count = 0 ;
while ( cur != null ) {
count++ ;
cur = cur. next;
}
return count;
}
public void addFirst ( int data) {
Node cur = new Node ( data) ;
cur. next = this . head;
this . head = cur;
}
public void addLast ( int data) {
Node node = new Node ( data) ;
if ( this . head == null ) {
this . head = node;
return ;
}
Node cur = this . head;
while ( cur. next != null ) {
cur = cur. next;
}
cur. next = node;
}
public boolean addIndex ( int index, int data) {
if ( index< 0 || index> getSize ( ) ) {
System . out. println ( "index不合法" ) ;
return false ;
}
Node node = new Node ( data) ;
Node cur = findIndexSubOne ( index) ;
node. next = cur. next;
cur. next = node;
return true ;
}
private Node findIndexSubOne ( int index) {
Node cur = this . head;
while ( index- 1 != 0 ) {
cur = cur. next;
index-- ;
}
return cur;
}
public boolean contains ( int key) {
Node node = new Node ( key) ;
if ( this . head == null ) {
System . out. println ( "链表为空" ) ;
return false ;
}
Node cur = this . head;
while ( cur != null ) {
if ( key == cur. val) {
return true ;
}
cur = cur. next;
}
return false ;
}
public void remove ( int key) {
if ( this . head. val == key) {
this . head = this . head. next;
return ;
}
Node node = searchPrev ( key) ;
if ( node == null ) {
System . out. println ( "不存在该关键字" ) ;
return ;
}
Node del = node. next;
node. next = del. next;
}
private Node searchPrev ( int key) {
Node cur = this . head;
while ( cur. next != null ) {
if ( cur. next. val == key ) {
return cur;
}
cur = cur. next;
}
return null ;
}
public void removeAllKey ( int key) {
Node prev = this . head;
Node cur = this . head. next;
while ( cur != null ) {
if ( cur. val == key) {
prev. next = cur. next;
} else {
prev = cur;
}
cur = cur. next;
}
if ( this . head. val == key) {
this . head = this . head. next;
}
}
public void clear ( ) {
this . head = null ;
}
}