美橙網站建設怎么做推廣一次多少錢
一、理論
1 單鏈表結構
2 增、刪、查 、改思路
- (增)直接添加放到最后即可。按順序添加:找到要修改的節(jié)點的前一個節(jié)點,插入新節(jié)點()。
- (改)要修改的節(jié)點修改內容即可。
- (刪)找到待刪除節(jié)點的前一個節(jié)點,把要刪除節(jié)點的后一個節(jié)點信息存放到該節(jié)點的next即可
- (查==較容易)遍歷依次打印即可。按編號查找,找到對應編號打印即可
二、代碼實現(xiàn)
1、JAVA代碼實現(xiàn)
package basicdata;public class SingleLinkedListTest {public static void main(String[] args) {Node node1 = new Node(123, "Tom", "無極劍道");//SingleLinkedList singleLinkedList = new SingleLinkedList();singleLinkedList.addNode(node1);singleLinkedList.list();System.out.println("*******************");singleLinkedList.addByOrder(new Node(234, "Jack", "斷頭斬殺"));singleLinkedList.addByOrder(new Node(121, "Jack", "斷頭斬殺"));singleLinkedList.addByOrder(new Node(121, "Jack", "斷頭斬殺"));singleLinkedList.list();//System.out.println("******修改后*******");//singleLinkedList.alter(new Node(121, "Bob", "無形之刃"));//singleLinkedList.list();// System.out.println("**************");//singleLinkedList.delNode(234);System.out.println("***反轉后***");singleLinkedList.reverSetList();singleLinkedList.list();}
}
//
class SingleLinkedList{// 先初始化一個頭結點,頭節(jié)點不存放數(shù)據(jù)private Node head = new Node(0,"表頭","領導單鏈表");// 返回表頭public Node getHead(){return head;}public SingleLinkedList() {}// 添加節(jié)點到單鏈表,按添加順序排列public void addNode(Node node){// 思路:把頭結點的地址給temp// 直到next = null時,讓next存放添加的節(jié)點Node temp = head;while (true){if (temp.next == null) {break;}else {temp = temp.next;}}// 退出while 循環(huán)時 temp.next = nulltemp.next = node;}// 遍歷單鏈表public void list(){Node temp = head;if (head == null) {System.out.println("鏈表為空");return;}while (true){if (temp == null) {break;}else {// 輸出節(jié)點信息System.out.println(temp);// 指針后移temp = temp.next;}}}// 根據(jù)編號順序插入節(jié)點 ,鏈表內容按編號從小到大排列public void addByOrder(Node node){// 需要先找到要添加位置的前一個節(jié)點// 鏈表為空不需要單獨考慮Node temp = head;// 為找到插入位置 需要一個 flagboolean flag = false;while (true){// 此情況可以添加,添加到表頭后if (temp.next == null) { // 到鏈表末端break;}// 此情況不可以添加,要添加的編號已經存在if (temp.next.number == node.number) {flag = true;break;}//此情況為找到要添加位置的前一個節(jié)點,可以添加if (temp.next.number > node.number) {break;}else {temp = temp.next;}}if (flag ) {System.out.printf("你要插入的節(jié)編號%d已經存在",node.number);System.out.println();}else {node.next = temp.next ;temp.next=node;}}// 修改節(jié)點信息(根據(jù)編號),編號不變,修改內容public void alter(Node node){if (head.next == null) {System.out.println("鏈表為空");return;}// 和按編號插入(Node temp = head;)稍微有點區(qū)別// Node temp = head.next;Node temp = head.next;boolean flag = false;while (true){if (temp == null) {break;}// 找到要修改的節(jié)點,可以修改if (temp.number == node.number) {flag = true;break;}else {temp = temp.next;}}if (flag) {// 修改temp.name = node.name;temp.skill= node.skill;}else {System.out.println("沒有找到要修改的節(jié)點");}}// 根據(jù)編號刪除節(jié)點public void delNode(int number){//需要找到待刪除的前一個節(jié)點Node temp = head;boolean flag = false;while (true){if (temp.next == null) {break;}//找到待刪除的前一個節(jié)點if (temp.next.number == number) {flag = true;break;}else {temp = temp.next;}}if (flag ) {//temp.next = temp.next.next;}else {System.out.println("要刪除的元素不存在");}}// 反轉單鏈表public void reverSetList(){if (this.head.next== null||this.head.next.next==null) {return;}Node tempCur = this.head.next; // 輔助變量Node tempNext = null; // 指向tempCur,不然會丟失Node reverSetHead = new Node(0, "", ""); // 新鏈表while (tempCur != null){tempNext = tempCur.next; //存儲當前節(jié)點的下一節(jié)點tempCur.next = reverSetHead.next;// 頭插法 把當前節(jié)點接到到reverSetHeadreverSetHead.next = tempNext;tempCur=tempNext;// 后移}this.head.next = reverSetHead.next;}}
// 定義Node
class Node{public int number;public String name;public String skill;public Node next; //存放下一個節(jié)點地址
//構造器public Node(int number, String name, String skill) {this.number = number;this.name = name;this.skill = skill;//this.next = next;// 理解:不給next賦值//沒申請一個節(jié)點時 next = null}//重寫 toString@Overridepublic String toString() {return "Node{" +"number=" + number +", name='" + name + '\'' +", skill='" + skill + '\'' +'}';}
}
運行結果
Node{number=0, name='表頭', skill='領導單鏈表'}
Node{number=123, name='Tom', skill='無極劍道'}
*******************
你要插入的節(jié)編號121已經存在
Node{number=0, name='表頭', skill='領導單鏈表'}
Node{number=121, name='Jack', skill='斷頭斬殺'}
Node{number=123, name='Tom', skill='無極劍道'}
Node{number=234, name='Jack', skill='斷頭斬殺'}
******修改后*******
Node{number=0, name='表頭', skill='領導單鏈表'}
Node{number=121, name='Bob', skill='無形之刃'}
Node{number=123, name='Tom', skill='無極劍道'}
Node{number=234, name='Jack', skill='斷頭斬殺'}
刪除后**************
Node{number=0, name='表頭', skill='領導單鏈表'}
Node{number=121, name='Bob', skill='無形之刃'}
Node{number=123, name='Tom', skill='無極劍道'}
2、C語言代碼實現(xiàn)