[LintCode]Swap Two Nodes in Linked List

来源:互联网 发布:html转xml python 编辑:程序博客网 时间:2024/06/05 11:11

http://www.lintcode.com/en/problem/swap-two-nodes-in-linked-list/#

调换两个指定值的节点,不存在则不换,每个节点值唯一





保证n1一定在n2之前,然后分两种情况调换:1、n1和n2相邻;2、不相邻

public class Solution {    /**     * @param head a ListNode     * @oaram v1 an integer     * @param v2 an integer     * @return a new head of singly-linked list     */    public ListNode swapNodes(ListNode head, int v1, int v2) {        ListNode dummy = new ListNode(0);        dummy.next = head;                ListNode node1Prev = null, node2Prev = null;        ListNode cur = dummy;        while (cur.next != null) {            if (cur.next.val == v1) {                node1Prev = cur;            } else if (cur.next.val == v2) {                node2Prev = cur;            }            cur = cur.next;        }                if (node1Prev == null || node2Prev == null) {            return head;        }                if (node2Prev.next == node1Prev) {            // make sure node1Prev is before node2Prev            ListNode t = node1Prev;            node1Prev = node2Prev;            node2Prev = t;        }                ListNode node1 = node1Prev.next;        ListNode node2 = node2Prev.next;        ListNode node2Next = node2.next;        if (node1Prev.next == node2Prev) {            node1Prev.next = node2;            node2.next = node1;            node1.next = node2Next;        } else {            node1Prev.next = node2;            node2.next = node1.next;                        node2Prev.next = node1;            node1.next = node2Next;        }                return dummy.next;    }}


0 0
原创粉丝点击