Java实现-交换链表当中的两个节点
2017-06-13 21:32
666 查看
给你一个链表以及两个权值
注意事项
你需要交换两个节点而不是改变节点的权值
您在真实的面试中是否遇到过这个题?
Yes
样例
给出链表
返回结果
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; } }
相关文章推荐
- Java实现 双链表互换任意两个节点
- 511- 交换链表当中两个节点
- Java实现双链表互相交换任意两个节点的方法示例
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head
- LintCode 交换链表当中两个节点
- 交换链表当中两个节点-LintCode
- 交换链表当中两个节点
- 剑指offer----两个链表的第一个公共节点----java实现
- LintCode 交换链表当中两个节点
- LintCode:交换链表当中两个节点
- LintCode-交换链表当中两个节点
- LINTCODE——交换链表当中两个节点
- Java实现-两两交换链表中的节点
- 《剑指offer》编程题java实现(二十二):两个链表的第一个公共节点
- LintCode:交换链表当中两个节点
- lintcode-511-交换链表当中两个节点
- 两个链表的第一个公共节点(Java实现)
- Java链表指针确实好烦 - 交换链表中连续的两个节点的位置
- lintcode:交换链表当中两个节点
- (整理)Java实现链表--找到两个链表的第一个公共结点(网易笔试题2016)