Java實現-交換連結串列當中的兩個節點
阿新 • • 發佈:2019-02-14
給你一個連結串列以及兩個權值v1
和v2
,交換連結串列中權值為v1
和v2
的這兩個節點。保證連結串列中節點權值各不相同,如果沒有找到對應節點,那麼什麼也不用做。
注意事項
你需要交換兩個節點而不是改變節點的權值
您在真實的面試中是否遇到過這個題? Yes 樣例給出連結串列 1->2->3->4->null
,以及 v1
= 2
, v2
= 4
返回結果 1->4->3->2->null
。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ 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){ ListNode t=node1Prev; node1Prev=node2Prev; node2Prev=t; } ListNode node1=node1Prev.next; ListNode node2=node2Prev.next; if(node1Prev.next==node2Prev){ node1Prev.next=node2; node1.next=node2.next; node2.next=node1; }else{ node1Prev.next=node1.next; node2Prev.next=node2.next; node2.next=node1Prev.next; node1Prev.next=node2; node1.next=node2Prev.next; node2Prev.next=node1; } return dummy.next; } }