Leetcode(Top100)----24. 두 개의 교환 체인 테이블의 노드

5373 단어 Leetcode체인 미터
체인 테이블을 정하고 두 개를 교환하며 그 중 인접한 노드를 교환하고 교환된 체인 테이블을 되돌려줍니다.너는 단순히 노드 내부의 값을 바꾸는 것이 아니라 실제적으로 노드 교환을 해야 한다.
  • 귀속 해법
  • public ListNode swapPairs(ListNode head) {
         
            // : , 
            if(head==null || head.next==null){
         
                return head;
            }
            ListNode next = head.next;
            // , head next , next.next          
            head.next = swapPairs(next.next);
            next.next = head;
            //next 
            return next;
        }
    

    문제 풀이 사고방식: 점차적으로 분치의 사상을 채택해야 한다. 즉, 문제의 구해는 같은 해법을 가진 여러 개의 자 문제의 해의 합병으로 나눌 수 있다.이 문제는 먼저 헤더 바늘의 넥스트 바늘을 넥스트 뒤의 체인 시계를 가리키고 넥스트의 다음 바늘을 헤더로 반전시킨다.이 때 넥스트 다음 부분의 체인 시계는 또 하나의 구해임을 알 수 있다
  • 비귀속 해법
  • /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
         
        public ListNode swapPairs(ListNode head) {
         
            // , 
            ListNode dummpy = new ListNode(0);
            dummpy.next = head;
            ListNode pre = dummpy;
            ListNode cur;
            ListNode next;
            while(head!=null && head.next!=null){
         
                cur = head;
                next = head.next;
                pre.next=cur.next;
                cur.next = next.next;
                next.next = cur;
                pre=cur;
                head = cur.next;
            }
            return dummpy.next;
        }
    }
    

    문제 풀이 사고방식: 1. 이 문제는 세 개의 바늘pre(전치),cur(현재),next(다음)2를 이용했다. 먼저pre를 사용한다.next는cur의 다음 결점을 가리키고cur를 가리킨다.next는 next의 다음 노드를 가리키고 next를 가리킨다.next는cur를 가리키며, 이렇게 하면 1라운드의 두 결점의 교환을 완성하고, 다음에 헤드를cur로 이동합니다.next,pre가cur로 이동하여 다음 교환 4를 엽니다. 이 문제는 귀속적이지 않습니다. 그러나 코드를 작성하는 과정에서 바늘의 개념은 헷갈리기 쉽습니다.java에는 바늘이 없지만 실제 대상은 하나의 인용(지침)이고 만약에 한 대상이 다른 값을 부여받았다면 바늘이 움직였다는 것만 설명할 수 있습니다. 이전에 인용한 대상은 실제로 존재했기 때문에 너무 의심할 필요가 없습니다.

    좋은 웹페이지 즐겨찾기