一.题目描述
给你一个链表以及两个权值v1
和v2
,交换链表中权值为v1
和v2
的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。
https://www.lintcode.com/problem/511/description
二.代码
public ListNode swapNodes(ListNode head, int v1, int v2) {
if (head == null || head.next == null) {
return head;
}
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode p1 = dummy;
ListNode p2 = dummy;
while (p1.next != null && p1.next.val != v1) {
p1 = p1.next;
}
while (p2.next != null && p2.next.val != v2) {
p2 = p2.next;
}
if (p1.next == null || p2.next == null) {
return head;
}
ListNode node1 = p1.next;
ListNode node2 = p2.next;
p1.next = p2.next;
p2.next = node1;
ListNode temp = node1.next;
node1.next = node2.next;
node2.next = temp;
return dummy.next;
}