【Leetcode】【Swap Nodes in Pairs】【两两交换链表中的节点】【C++】
- 题目:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
- 考虑情况:
- head==NULL: 直接返回head
- 链表结点个数为单数
- 链表结点个数为偶数
- 链表前两个结点交换和后面的处理情况不相同,如 1---->2---->NULL, 只需修改1,2结点的next指针; 而1---->2---->3---->4---->NULL 修改1,2结点的next指针后,修改3,4结点的next指针后,还需修改1结点的next指针(由1--->3 改为1--->4)。为了避免处理前两个结点与后面结点情况的不一致性,可在头结点新插入一个指针,来保持“一般性”。
- 代码:
/** * 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==NULL) return head; ListNode *head1=new ListNode(0); head1->next=head; ListNode *p1=head; ListNode *p2=p1->next; ListNode *lp=head1; while(p2) { p1->next=p2->next; p2->next=p1; lp->next=p2; lp=p1; p1=p1->next; if(p1) p2=p1->next; else break; } return head1->next; } };
转载请注明出处及链接 谢谢