日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

链表的基本操作 java_Java_实现单链表-基本操作

發布時間:2025/3/11 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表的基本操作 java_Java_实现单链表-基本操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 packageofficeCoding;2

3 importjava.util.ArrayList;4 importjava.util.Stack;5

6 /**

7 * 從尾到頭遍歷鏈表 輸入一個鏈表,按鏈表值從尾到頭的順序返回一個ArrayList8 *9 *@authorAdministrator10 */

11 class ListNode {//單鏈表節點構建

12 intval;13 ListNode next = null;14

15 ListNode(intval) {16 this.val =val;17 }18 }19

20 public classPro_03 {21

22 static ListNode head = null;//創建一個頭節點

23

24 public static voidmain(String[] args) {25 addNode(5);26 addNode(8);27 ArrayList list =printListFromTailToHead(head);28 System.out.println(list);29 }30

31 //隊列和棧是一對好基友,從尾到頭打印鏈表,當然離不開借助棧的幫忙啦32 //所以,先把鏈表里的東西,都放到一個棧里去,然后按順序把棧里的東西pop出來,就這么簡單

33 public static ArrayListprintListFromTailToHead(ListNode listNode) {34 Stack stack = new Stack();35 while (listNode != null) {36 stack.push(listNode.val);37 listNode =listNode.next;38 }39 ArrayList list = new ArrayList();40 while (!stack.isEmpty()) {41 list.add(stack.pop());42 }43 returnlist;44 }45

46 //input

47 public static void addNode(intd) {48 ListNode newNode = newListNode(d);49 if (head == null) {50 head =newNode;51 }52 ListNode tmp =head;53 while (tmp.next != null) {54 tmp =tmp.next;55 }56 tmp.next =newNode;57 }58

59 //delete

60 public boolean deleteNode(intindex) {61 if (index < 1 || index >length()) {62 return false;//如果當前index在鏈表中不存在

63 }64 if (index == 1) {//如果index指定的是頭節點

65 head =head.next;66 return true;67 }68 int i = 2;69 ListNode preNode = head;//前一個節點(從頭節點開始)

70 ListNode curNode = preNode.next;//當前節點

71 while (curNode != null) {72 if (i ==index) {73 preNode.next = curNode.next;//刪除當節點,前節點連接到下節點

74 return true;75 }76 preNode =curNode;77 curNode =curNode.next;78 i++;79 }80 return false;81 }82

83 //返回節點長度

84

85 public intlength() {86 int length = 0;87 ListNode tmp =head;88 while (tmp != null) {89 length++;90 tmp =tmp.next;91 }92 returnlength;93 }94

95 //鏈表反轉

96

97 publicListNode ReverseIteratively(ListNode head) {98 ListNode pReversedHead =head;99 ListNode pNode =head;100 ListNode pPrev = null;101 while (pNode != null) {102 ListNode pNext =pNode.next;103 if (pNext == null) {104 pReversedHead =pNode;105 }106 pNode.next =pPrev;107 pPrev =pNode;108 pNode =pNext;109 }110 this.head =pReversedHead;111 return this.head;112 }113

114 //查找單鏈表的中間節點

115

116 publicListNode SearchMid(ListNode head) {117 ListNode p = this.head, q = this.head;118 while (p != null && p.next != null && p.next.next != null) {119 p =p.next.next;120 q =q.next;121 }122 System.out.println("Mid:" +q.val);123 returnq;124 }125

126 //查找倒數 第k個元素

127

128 public ListNode findElem(ListNode head, intk) {129 if (k < 1 || k > this.length()) {130 return null;131 }132 ListNode p1 =head;133 ListNode p2 =head;134 for (int i = 0; i < k; i++)//前移k步

135 p1 =p1.next;136 while (p1 != null) {137 p1 =p1.next;138 p2 =p2.next;139 }140 returnp2;141 }142

143 //排序

144

145 publicListNode orderList() {146 ListNode nextNode = null;147 int tmp = 0;148 ListNode curNode =head;149 while (curNode.next != null) {150 nextNode =curNode.next;151 while (nextNode != null) {152 if (curNode.val >nextNode.val) {153 tmp =curNode.val;154 curNode.val =nextNode.val;155 nextNode.val =tmp;156 }157 nextNode =nextNode.next;158 }159 curNode =curNode.next;160 }161 returnhead;162 }163

164 //從尾到頭輸出單鏈表,采用遞歸方式實現

165

166 public voidprintListReversely(ListNode pListHead) {167 if (pListHead != null) {168 printListReversely(pListHead.next);169 System.out.println("printListReversely:" +pListHead.val);170 }171 }172

173 //判斷鏈表是否有環,單向鏈表有環時,尾節點相同

174

175 public booleanIsLoop(ListNode head) {176 ListNode fast = head, slow =head;177 if (fast == null) {178 return false;179 }180 while (fast != null && fast.next != null) {181 fast =fast.next.next;182 slow =slow.next;183 if (fast ==slow) {184 System.out.println("該鏈表有環");185 return true;186 }187 }188 return !(fast == null || fast.next == null);189 }190

191 //找出鏈表環的入口

192

193 publicListNode FindLoopPort(ListNode head) {194 ListNode fast = head, slow =head;195 while (fast != null && fast.next != null) {196 slow =slow.next;197 fast =fast.next.next;198 if (slow ==fast)199 break;200 }201 if (fast == null || fast.next == null)202 return null;203 slow =head;204 while (slow !=fast) {205 slow =slow.next;206 fast =fast.next;207 }208 returnslow;209 }210 }

總結

以上是生活随笔為你收集整理的链表的基本操作 java_Java_实现单链表-基本操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。