java里面沒有指針的說法,所以初始化的時候,就是新建一個null節點就是一個空鏈表了。//C里面鏈表會有頭指針,頭指針指向頭節點
如果想向空鏈表插入第一個節點,直接head=newNode;
注意的情況是
如果想循環鏈表,一定新建一個節點把head考出來,然后遍歷,不能直接用head遍歷
/**
* Created by Administrator on 2017-10-27.
*/
public class linkedListFuns {
public static void main(String[] arg) {
Node head = new Node(1);
for(int i=2;i<10;i++){
insertFromTail(head,new Node(i));
}
printList(head);
deleteFromIndex(head,3);
printList(head);
}
static class Node {
int data;
Node next;
public Node(int d) {
data = d;
next = null;
}
}
//從頭節點插入,比較簡單不用遍歷鏈表
public static void insetFromHead(Node head,Node newNode){
newNode.next=head;
head = newNode;
}
//在尾部插入,要遍歷鏈表
public static void insertFromTail(Node head1, Node newNode){
if(head1 == null){ //如果是個空鏈表,直接把新節點賦值給head,然后結束,要先判斷null的情況 其實這是一段錯誤代碼,大家可以查看我另外一篇文章,Java參數引用傳遞之例外:null
head1 =newNode;
return;
}
Node temp = head1; //用temp代替head去遍歷找到最后一個節點,一定不要用head自己去遍歷,不然就找不到鏈表頭了
while (temp.next!=null){
temp=temp.next;
}
temp.next=newNode;
}
//計算鏈表的長度
public static int length(Node head){
int len =0;
Node temp = head;
while(temp!=null){
len++;
temp=temp.next;
}
return len;
}
//從特定位置刪除一個節點
public static boolean deleteFromIndex(Node head,int index){
if(index<1||index>length(head)){ //先判斷是否越界
return false;
}
if(index ==1){//如果是刪除第一個元素,因為直接涉及到了head所以只能單獨處理
head = head.next;
return true;
}
Node curNode = head;
for(int curIndex =1;curIndex<index-1;curIndex++){ //刪除順序為index的node只能將curNode停在index-1的位置
curNode = curNode.next;
}
curNode.next=curNode.next.next;
return true;
}
//按照順序輸出一個列表
public static void printList(Node head){
Node temp = head;
while(temp != null){
System.out.print(temp.data+" ");
temp = temp.next;
}
System.out.println();
}
//對鏈表進行冒泡排序
public static void orderList(Node head){
}
}