Leetcode 알고리즘 자바 전체 해답 -- 24. 두 개의 교환 링크 의 노드

4736 단어 LeetCode알고리즘
Leetcode 알고리즘 자바 전체 해답 – 24. 두 개의 교환 링크 의 노드
글 목록
  • Leetcode 알고리즘 자바 전체 해답 - 24. 두 교환 링크 의 노드
  • 제목
  • 생각
  • 결과
  • 총화
  • 코드
  • 내 대답
  • 사내 들 의 답
  • 테스트 용례
  • 기타
  • 제목.
    하나의 링크 를 지정 하고 두 개의 인접 한 노드 를 교환 하 며 교환 후의 링크 를 되 돌려 줍 니 다.
    예시:
    
       1->2->3->4,       2->1->4->3.
      :
    
                   。
                    ,             。
    
    

    생각.
    세 개의 변수 저장 소 설명
    cur – 현재 node, preCur – 이전 node, preDoubleCur – 이전 node 의 이전 node
    순환 횟수 num, 짝수 일 때 교환
    순환
    시간 복잡 도 / 공간 복잡 도: n / 1
    데이터 가 1, 2, 3, 4, 5, 6 이 라 고 가정 하면 4 로 순환 되 었 습 니 다.
    cur: val = 4,next=5
    preCur: val = 3,next=4
    preDoubleCur: val = 2,next=3
    교환 방식:
        ListNode tmpCur = cur;
        cur = cur.next;
        
        preDoubleCur.next = tmpCur;
        tmpCur.next = preCur;
        preCur.next = cur;
    

    결실
    70% 가 넘 는 테스트 사례
    시간 복잡 도 / 공간 복잡 도: n / 1
    총결산
    코드
    나의 답
        /**************************************
         *   
               ,           ,         。
    
           :
    
            1->2->3->4,       2->1->4->3.
           :
    
                        。
                         ,             。
         **************************************/
    
        /**************************************
         *
         *   :
         *      1.           cur--  node,preCur--   node,preDoubleCur--   node    node
         *               num,         
         *           ,  
         *
         *              /     : n/1
         *              ,1,2,3,4,5,6,     4    
         *         cur: val = 4,next=5
         *         preCur: val = 3,next=4
         *         preDoubleCur: val = 2,next=3
         *
         *             :
         *                  ListNode tmpCur = cur;
         *                  cur = cur.next;
         *
         *                  preDoubleCur.next = tmpCur;
         *                  tmpCur.next = preCur;
         *                  preCur.next = cur;
         *
         *
         *
         *     
         *        70%     
         *           /     : n/1
         *       :
         *
         *   :
         *
         * ***********************************/
        public ListNode swapPairs(ListNode head) {
            if (head == null || head.next == null) {
                return head;
            }
    
            ListNode result = head.next;
    
            ListNode cur = head;
            ListNode preCur = head;
            ListNode preDoubleCur = head;
    
            int num = 0;
    
            while (cur != null) {
                num++;
                if (num % 2 == 0) {
                    ListNode tmpCur = cur;
                    cur = cur.next;
    
                    preDoubleCur.next = tmpCur;
                    tmpCur.next = preCur;
                    preCur.next = cur;
                    continue;
                }
                preDoubleCur = preCur;
                preCur = cur;
                cur = cur.next;
    
            }
            return result;
        }
     
    

    사내 들 의 답
    
        public ListNode better(ListNode head) {
            ListNode mid;
            ListNode ans;
            if (head == null || head.next == null) {
                return head;
            }
            ans = head.next;
            while (true) {
                mid = head.next;
                head.next = head.next.next;
                mid.next = head;
                if (head.next != null && head.next.next != null) {
                    mid = head.next;
                    head.next = head.next.next;
                    head = mid;
                } else {
                    head = head.next;
                    break;
                }
    
            }
            return ans;
        }
    

    테스트 용례
    
        @Test
        public void test024() {
            //       
            ListNode listNode11 = new ListNode(1);
            ListNode listNode12 = new ListNode(2);
            ListNode listNode13 = new ListNode(3);
            ListNode listNode14 = new ListNode(4);
            listNode11.next = listNode12;
            listNode12.next = listNode13;
            listNode13.next = listNode14;
    
            //        
            ListNode expResult1 = new ListNode(2);
            ListNode expResult12 = new ListNode(1);
            ListNode expResult13 = new ListNode(4);
            ListNode expResult15 = new ListNode(3);
            expResult1.next = expResult12;
            expResult12.next = expResult13;
            expResult13.next = expResult15;
    
            Solution024 solution024 = new Solution024();
    
            ListNode result1 = solution024.swapPairs(listNode11);
    
            Assert.assertEquals(expResult1.toArray(), result1.toArray());
        }
    

    기타
    코드 위탁 관리 코드 클 라 우 드 주소:https://gitee.com/lizhaoandroid/LeetCodeAll.git
    다른 내용 을 보면 칼럼 이나 제 블 로 그 를 클릭 할 수 있 습 니 다.https://blog.csdn.net/cmqwan
    "사내 들 의 답" 라벨 은 leetcode 에서 왔 습 니 다. 권리 침해 에 대해 서 는 저 에 게 연락 하여 삭제 해 주 십시오.
    문의 사항 이 있 으 시 면 연락 주세요. 연락처: QQ 3060507060

    좋은 웹페이지 즐겨찾기