Description
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list’s nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
分析
题目的意思是:成对的交换链表的节点。
- 需要建立dummy节点,然后直接按照题目给的方式在遍历链表的时候进行反转。
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) {
ListNode* dummy=new ListNode(-1);
dummy->next=head;
ListNode* pre=dummy;
while(pre->next&&pre->next->next){
ListNode *t=pre->next->next;
pre->next->next=t->next;
t->next=pre->next;
pre->next=t;
pre=t->next;
}
return dummy->next;
}
};
Python代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
root=ListNode()
root.next=head
pre=root
while pre.next and pre.next.next:
# 第2个
q=pre.next.next
# 第1个next链接到第3个
pre.next.next=q.next
# 第2个next链接到第1个
q.next=pre.next
# 第1个链接到新的第1个
pre.next=q
# pre 跳转到新的第2个
pre=pre.next.next
return root.next
我实现了一下易懂的版本:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode(-1)
dummy.next = head
pre = dummy
while pre.next and pre.next.next:
first = pre.next
second = pre.next.next
# swap
pre.next = second
first.next = second.next
second.next = first
# skip
pre = pre.next.next
return dummy.next