LeetCode Swap Nodes in Pairs交换链表中的两个节点

来源:互联网 发布:下载软件评测 编辑:程序博客网 时间:2024/06/06 10:14

Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

 入门题,注意:

1 保存next节点

2 需要使用三个节点指针

3 保存好链表头指针 

 

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:ListNode *swapPairs(ListNode *head) {if (!head || !head->next) return head;ListNode *pre = head->next;ListNode *cur = pre->next;pre->next = head;head->next = cur;head = pre;pre = pre->next;while (pre){ListNode *post;cur = pre->next;if (cur && cur->next) post = cur->next;else break;pre->next = post;pre = post->next;post->next = cur;cur->next = pre;pre = cur;}return head;}};


 

 2014-1-25 update

ListNode *swapPairs(ListNode *h){ListNode dummy(0);dummy.next = h;ListNode *pre = &dummy;while (h && h->next){ListNode *t = h->next->next;pre->next = h->next;h->next->next = h;h->next = t;pre = h;h = t;}return dummy.next;}