1. gzyueqian
      13352868059

      比較好的java培訓中心對于學習java的學員來說有什么好處?

      更新時間: 2018-10-01 12:00:00來源: Java培訓瀏覽量:3605

          java遞歸法
          經歷了很多面試,面試官考察的算法無非是斐波那契數列和單鏈表反轉,盡管是這些都是基礎知識,然而我對單鏈表反轉有更多的想法。 
          遞歸法是我早期在面試中使用的算法,很有逼格,寫起來非常優雅,非常好理解。
          先定義鏈表數據結構
          static class Node {
              Integer data;
              Node next;
          }
      
      
          static Node readyNode() {
              Node linkNode1 = new Node();
              linkNode1.data = 1;
              Node linkNode2 = new Node();
              linkNode2.data = 2;
              Node linkNode3 = new Node();
              linkNode3.data = 3;
              Node linkNode4 = new Node();
              linkNode4.data = 4;
              Node linkNode5 = new Node();
              linkNode5.data = 5;
              Node linkNode6 = new Node();
              linkNode6.data = 6;
              linkNode1.next = linkNode2;
              linkNode2.next = linkNode3;
              linkNode3.next = linkNode4;
              linkNode4.next = linkNode5;
              linkNode5.next = linkNode6;
              return linkNode1;
          }

      如上代碼所示 
          遞歸法會逐層確定該節點有沒有next節點,若為空,則認定遞歸到深層元素。同時將該層節點的next指向父節點,在遞歸棧中以此類推。
          static Node reverseLinkedList(Node node) {
              if (node == null || node.next == null) {
                  return node;
              } else {
                  Node headNode = reverseLinkedList(node.next);
                  node.next.next = node;
                  node.next = null;
                  return headNode;
              }
          }

          上圖展示了遞歸后的效果。 
          如果注釋掉第7行,會發生如上圖所示的1、2號節點閉環問題。由于1號節點的next沒有置空,依舊指向2號節點,所以遍歷時候肯定存在環。
          java遍歷法
          static Node reverseLinkedList(Node node) {
              Node previousNode = null;
              Node currentNode = node;
              Node headNode = null;
              while (currentNode != null) {
                  Node nextNode = currentNode.next;
                  if (nextNode == null) {
                      headNode = currentNode;
                  }
                  currentNode.next = previousNode;
                 previousNode = currentNode;
                  currentNode = nextNode;
              }
              return headNode;
          }

          LinkedList的反轉
          LinkedList沒有提供反轉鏈表的相關函數,以下是通過foreach實現鏈表反轉
          static LinkedList reverseLinkedList(LinkedList linkedList) {
              LinkedList<Object> newLinkedList = new LinkedList<>();
              for (Object object : linkedList) {
                  newLinkedList.add(0, object);
              }
              return newLinkedList;
          }
          想要知道更多的java應用技術那就加入我們吧!

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲日韩欧美在线一区二区 | 日本一区二区在线视频观看 | 婷婷色高清在线观看 | 宅女午夜福利免费视频 | 亚洲午夜福利视频网 | 亚洲午夜福利在线观看首页 |