建立鏈表(頭插法)
咱們知道,在數據結構中鏈表通常有兩個部分:data以及指針域next。
那麼怎麼經過data以及next建立一個鏈表呢?
萬物皆有開端,因此咱們首先須要創立一個頭結點,head。
javascript
public static Node createLinkByHead(Scanner reader) { Node head=null; }
而後咱們將鍵盤錄入的數據經過while循環按照輸入順序一個結點一個結點的賦值給結點.data(這裏咱們將數字爲0設置爲循環的終止條件-----也就是當數值爲0時,while循環中止,鏈表就建立到這裏,並不會把0進行賦值)。每次新建一個結點,head都會變成新建的那個結點,因此最後的結點順序是與錄入順序相反的。java
public static Node createLinkByHead(Scanner input) { Node head=null; int m=input.nextInt(); while(m!=0)//進行判斷 { Node p=new Node(m);//建立一個新的對象——p結點。 if(head==null)head=p;//若是頭結點爲空、將P做爲頭結點。 else { p.next=head;//此前已經有結點,p結點的next指針域指向head head=p;//將head移到如今的p結點 } m=input.nextInt();//讀取下一個數字。 } return head;//返回頭結點 }
示意圖以下:
數據結構
建立鏈表(尾插法)
尾插法依然換湯不換藥,可是咱們須要多出一個指針用來指向尾部的節點。spa
public static createLinkByTail(Scanner input) Node head=null; Node Tail=null; int m=input.nextInt();
而後咱們錄入第一個節點以後,錄入第二個結點時,head不會再變化,他一直指向第一個錄入的節點,而Tail用來進行以前頭插法head的賦值指針域的操做。指針
public static createLinkByTail(Scanner input) { Node head=null; Node tail=null; int m=input.nextInt(); while(m!=0) { Node p=new Node(m);//建立新的對象。 if(head==null)tail=head=p;//若是head爲空,那麼至關於第一個結點,將tail順便一塊兒指向這個節點 else { tail.next=p;//將當前節點的next指針域指向下一個節點。 tail=p;//tail後移。 } m=input.nextInt(); } return head;//返回頭結點 }
反轉鏈表
反轉鏈表,咱們腦子裏應該能夠想象獲得怎麼反轉。也就是像下圖:code
因此咱們所須要作的就是從head開始經過遍歷(從第一個到最後一個)一個一個去反轉他們的指針,最後將head指向最後一個便可。
整個反轉過程能夠理解成 (head)1->2->3->null 變成 (head)3->2->1->null。
對象
public static reverseLink(head) { Node p=head;//將p做爲第一個節點 head=null; if(p!=null) { Node q=p.next;//將當前節點指向下一個結點的指針保存到q裏。 p.next=head;//將當前結點指向原來的上一個結點 head=p;//將head後移一個結點; p=q;//把開始指向的位置賦給p,能夠當作p=p.next(原來的); } return head }
這是個人第一篇博客,若有描述的不對,煩請各位指出,多多包涵!謝謝你們。blog