[LintCode] Swap Two Nodes in Linked List
1865 단어 swaplinkedlist자바
Given a linked list and two values v1 and v2. Swap the two nodes in the linked list with values v1 and v2. It's guaranteed there is no duplicate values in the linked list. If v1 or v2 does not exist in the given linked list, do nothing.
Notice
You should swap the two nodes with values v1 and v2. Do not directly swap the values of the two nodes.
Example
Given
1->2->3->4->null
and v1 = 2, v2 = 4.
Return
1->4->3->2->null.
Note
Dummy 노드 를 만 들 고 head 를 가리 키 며 (head 를 조작 할 수 있 습 니 다).v1 과 v2 의 결점 (n1, n2 로 설정) 의 앞 결점 p1, p2 를 찾 습 니 다.만약 p1 과 p2 중 하나 가 null 이 라면 n1 과 n2 중 하나 도 반드시 null 이 고 머리 결산 점 으로 돌아 가면 됩 니 다.본 격 적 으로 n1, n2, 그리고 대응 하 는 next 결점 x1, x2 를 구축 한 다음 에 n1 과 n2 가 인접 한 결점 의 두 가지 상황 을 분석한다. n1 은 n2 의 전 결점 또는 n2 는 n1 의 전 결점 이다.비 인접 결점 의 일반적인 상황 을 재 분석 하 다.dummy. next 로 돌아 가 끝 냅 니 다.
Solution
public class Solution {
public ListNode swapNodes(ListNode head, int v1, int v2) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode p1 = null, p2 = null, cur = dummy;
while (cur.next != null) {
if (cur.next.val == v1) p1 = cur;
else if (cur.next.val == v2) p2 = cur;
cur = cur.next;
}
if (p1 == null || p2 == null) return dummy.next;
ListNode n1 = p1.next, n2 = p2.next, x1 = n1.next, x2 = n2.next;
if (p1.next == p2) {
p1.next = n2;
n2.next = n1;
n1.next = x2;
}
else if (p2.next == p1) {
p2.next = n1;
n1.next = n2;
n2.next = x1;
}
else {
p1.next = n2;
n2.next = x1;
p2.next = n1;
n1.next = x2;
}
return dummy.next;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0908 Chapter 03. 자바 객체지향 프로그래밍헤더,필드,메소드,생성자 Arrays.toString(배열변수); 사용 (impot java.util.Arrays; 해줘야함) toString 객체 역할을하지만 객체아니어서 오버라이딩 불가 객체안의 데이터를 스트링으...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.