[LeetCode][Java] Swap Nodes In Pairs
문제
Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list's nodes (i.e., only nodes themselves may be changed.)
제한 사항
- The number of nodes in the list is in the range
[0, 100]
. 0 <= Node.val <= 100
접근
인접한 노드 쌍을 짝지어 값을 swap
하는 알고리즘 문제입니다. 값만 바꾸는 건 하지 말라네요 꼼수부리지 말라는거.
'이거 그냥 현재 노드랑 다음 노드 가져와서 바꿔주기만 하면 되는거 아닌가?' 하면서 접근했는데, 생각보다 신경써줘야할게 많더라구요 ㅠ
바꾸는 것까지야 좋은데 대상의 되는 노드의 부모와 다음 자식 노드에 대한 예외 처리까지 꼼꼼하게 해줘야 했습니다.
그래서 저 같은 경우엔 매개변수로 들어오는 노드를 답으로 제출하기 위해,
swap
을 하고 매개변수head
를 유지- 다음 쌍의 노드의 부모가 되는 노드를 따로 저장
swap
하는 과정에서 부모와 다음 자식 노드에 대한 예외처리
하는 방식으로 접근했습니다. 조금 머리를 쓰긴 했지만 속도도 빠르게 나와 만족스러운 결과를 냈습니다.
답안
public class Solution {
public ListNode swapPairs(ListNode head) {
if(null == head)
return null;
if(null == head.next)
return head;
// Head 유지
ListNode tmpNode = head;
head = head.next;
tmpNode.next = head.next;
head.next = tmpNode;
ListNode parentNode = tmpNode;
tmpNode = tmpNode.next;
while(null != tmpNode && null != tmpNode.next){
ListNode node = tmpNode;
ListNode nextNode = tmpNode.next;
parentNode.next = nextNode;
node.next = nextNode.next;
nextNode.next = node;
parentNode = node;
tmpNode = node.next;
}
return head;
}
}
여담
Leet Code
에서 ListNode 관련 문제가 많아서 이참에 값을 추가하는 클래스도 따로 구현해봤어요.
앞으로 테스트할 때 디버깅도 할 수 있을거 같아 유용하게 쓰일거 같아요 ㅎㅎ.
Leet Code
에서 디버깅을 하려면 따로 돈을 내야 하더라구요. 구매할 가치는 있다 생각하지만, 최대한 아껴서 필요할 때 사용하렵니다.
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
public void add(int val){
if(null == next){
next = new ListNode(val);
}
else{
add(this, val);
}
}
private void add(ListNode node, int val){
if(null == node.next){
node.next = new ListNode(val);
}
else{
add(node.next, val);
}
}
public void print(){
ListNode node = this;
while(null != node){
System.out.print(node.val + " ");
node = node.next;
}
System.out.println();
}
}
Author And Source
이 문제에 관하여([LeetCode][Java] Swap Nodes In Pairs), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@redgem92/LeetCodeJava-Swap-Nodes-In-Pairs저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)