LeetCode 24. 兩兩交換連結串列中的節點(C、C++、python)
阿新 • • 發佈:2018-12-16
給定一個連結串列,兩兩交換其中相鄰的節點,並返回交換後的連結串列。
示例:
給定1->2->3->4
, 你應該返回2->1->4->3
.
說明:
你的演算法只能使用常數的額外空間。
你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
C
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* swapPairs(struct ListNode* head) { if(NULL==head || NULL==head->next) { return head; } struct ListNode* p1=head; struct ListNode* p2=head->next; p1->next=p2->next; p2->next=p1; struct ListNode* res=p2; struct ListNode* last=p1; while(p1->next && p1->next->next) { p1=p1->next; p2=p1->next; p1->next=p2->next; p2->next=p1; last->next=p2; last=p1; } return res; }
C++
/** * 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(NULL==head || NULL==head->next) { return head; } ListNode* p1=head; ListNode* p2=head->next; p1->next=p2->next; p2->next=p1; ListNode* res=p2; ListNode* last=p1; while(p1->next && p1->next->next) { p1=p1->next; p2=p1->next; p1->next=p2->next; p2->next=p1; last->next=p2; last=p1; } return res; } };
python
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ if None==head or None==head.next: return head p1=head p2=head.next p1.next=p2.next p2.next=p1 res=p2 last=p1 while p1.next and p1.next.next: p1=p1.next p2=p1.next p1.next=p2.next p2.next=p1 last.next=p2 last=p1 return res