交换链表当中两个节点-LintCode
2017-10-27 09:34
621 查看
给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。
注意事项:
你需要交换两个节点而不是改变节点的权值
样例:
给出链表 1->2->3->4->null ,以及 v1 = 2 , v2 = 4
返回结果 1->4->3->2->null。
注意事项:
你需要交换两个节点而不是改变节点的权值
样例:
给出链表 1->2->3->4->null ,以及 v1 = 2 , v2 = 4
返回结果 1->4->3->2->null。
#ifndef C511_H #define C511_H #include<iostream> using namespace std; class ListNode{ public: int val; ListNode *next; ListNode(int val) { this->val = val; this->next = NULL; } }; class Solution { public: /* * @param head: a ListNode * @param v1: An integer * @param v2: An integer * @return: a new head of singly-linked list */ ListNode * swapNodes(ListNode * head, int v1, int v2) { // write your code here if (head == NULL) return NULL; ListNode *start = new ListNode(-1); start->next = head; ListNode *prev1 = start; ListNode *prev2 = start; ListNode *pv1 = head; ListNode *pv2 = head; while (pv1 != NULL) { if (pv1->val == v1) break; pv1 = pv1->next; prev1 = prev1->next; } while (pv2 != NULL) { if (pv2->val == v2) break; pv2 = pv2->next; prev2 = prev2->next; } if (pv1 == NULL || pv2 == NULL) return head; if (pv1->next == pv2) { pv1->next = pv1->next->next; prev1->next = pv2; pv2->next = pv1; return start->next; } if (pv2->next == pv1) { pv2->next = pv2->next->next; prev2->next = pv1; pv1->next = pv2; return start->next; } ListNode *tmp = pv2->next; prev1->next = pv2; pv2->next = pv1->next; prev2->next = pv1; pv1->next = tmp; return start->next; } }; #endif
相关文章推荐
- LintCode-交换链表当中两个节点
- lintcode:交换链表当中两个节点
- LintCode 交换链表当中两个节点
- lintcode-511-交换链表当中两个节点
- LintCode:交换链表当中两个节点
- LINTCODE——交换链表当中两个节点
- LintCode:交换链表当中两个节点
- LintCode 交换链表当中两个节点
- Java实现-交换链表当中的两个节点
- 交换链表当中两个节点
- 511- 交换链表当中两个节点
- [LintCode] Swap Two Nodes in Linked List 交换链表中的两个结点
- 给定一个链表,交换每两个相邻节点并返回其头部。
- Lintcode 451.两两交换链表中的节点
- [小算法] 交换链表中的两个节点
- lintcode 451 两两交换链表中的节点
- 【LintCode 简单】451. 两两交换链表中的节点
- Java链表指针确实好烦 - 交换链表中连续的两个节点的位置
- lintcode-451-两两交换链表中的节点
- 交换链表中两个节点