LintCode 交换链表当中两个节点
来源:互联网 发布:for与to的用法区别知乎 编辑:程序博客网 时间:2024/06/04 19:52
给你一个链表以及两个权值v1
和v2
,交换链表中权值为v1
和v2
的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。
样例
给出链表 1->2->3->4->null
,以及 v1
= 2
, v2
= 4
返回结果 1->4->3->2->null
。
分析:
找到两个节点和它们的前节点,把两个节点的前后节点都交换即可。
要注意两个节点相邻和头节点被交换的特殊情况。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: /** * @param head a ListNode * @oaram 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 vector<ListNode*> buf; ListNode* pre = NULL; ListNode* cur = head; while(cur) { if(cur->val == v1 || cur->val == v2) { buf.push_back(pre); buf.push_back(cur); } pre = cur; cur = cur->next; } if(buf.size() != 4) return head; if(buf[1]->next == buf[3]) { if(buf[0]) buf[0]->next = buf[3]; buf[1]->next = buf[3]->next; buf[3]->next = buf[1]; }else { if(buf[0]) buf[0]->next = buf[3]; if(buf[2]) buf[2]->next = buf[1]; ListNode* tmp = buf[3]->next; buf[3]->next = buf[1]->next; buf[1]->next = tmp; } if(buf[1] == head) return buf[3]; if(buf[3] == head) return buf[1]; return head; }};
0 0
- LintCode 交换链表当中两个节点
- LintCode:交换链表当中两个节点
- LintCode-交换链表当中两个节点
- LintCode 交换链表当中两个节点
- LintCode:交换链表当中两个节点
- 交换链表当中两个节点-LintCode
- lintcode(511)交换链表当中两个节点
- LINTCODE——交换链表当中两个节点
- 交换链表当中两个节点
- 511- 交换链表当中两个节点
- Java实现-交换链表当中的两个节点
- 511.Swap Two Nodes in Linked List-交换链表当中两个节点(中等题)
- LintCode:两两交换链表中的节点
- LintCode 两两交换链表中的节点
- 两两交换链表中的节点-LintCode
- Lintcode 451.两两交换链表中的节点
- lintcode——两两交换链表中的节点
- LintCode-两两交换链表中的节点
- KMP匹配算法
- AWT组件的Swing实现
- iOS8下动态改变Cell高度以及iOS8的动态类型理解
- 13 删除数据
- C语言 二级指针
- LintCode 交换链表当中两个节点
- 小白Unity入门(上)
- 字节字符流笔记
- 解决区块链三大问题的设想
- Android蒙逼之旅----各种动态布局
- iOS 修改状态栏的颜色的时候,始终无法高亮的解决办法
- 字符串操作大全
- hibernate懒加载
- iOS runtime机制