本文共 1950 字,大约阅读时间需要 6 分钟。
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {}};class Solution {//when finished the code, find come cases to test it firstpublic: ListNode *swapPairs(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function ListNode* prev = NULL; ListNode* first = NULL; ListNode* second = head; int k = 1; while (second != NULL) { if (k%2 == 0) { first->next = second->next; second->next = first; if(prev != NULL)//when process prev pointer, we should be very careful prev->next = second; else head = second; ListNode* tmp = first; first = second; second = tmp; } prev = first; first = second; second = second->next; k++; } return head; }};
second time
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void reverseList(ListNode* head, int k, ListNode*& reverseHead, ListNode*& reverseTail, ListNode*& nextHead) { reverseTail = head; ListNode* prev = head; ListNode* cur = head->next; for(int i = 0; i < k-1; ++i) { if(cur == NULL) break; ListNode* tmp = cur->next; cur->next = prev; prev = cur; cur = tmp; } reverseHead = prev; nextHead = cur; } ListNode *swapPairs(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function ListNode dummy(-1); ListNode* prev = &dummy; ListNode* nextHead = head; while(nextHead != NULL) { ListNode* reverseHead; ListNode* reverseTail; reverseList(nextHead, 2, reverseHead, reverseTail, nextHead); prev->next = reverseHead; prev = reverseTail; } prev->next = NULL; return dummy.next; }};
转载地址:http://khxti.baihongyu.com/