24. 两两交换链表中的节点

一、问题描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

二、代码和思路

1.首先判断链表的长度如果小于等于1则不需要交换

2.如果为2则只需要交换当前两个元素

3.如果大于2则不止需要交换还要考虑后面元素的链接,while循环也是不断遍历后面元素是够大于等于2个,如果为2两个则只需交换,大于2个还要考虑后面链接

# 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 head is None or head.next is None:
            return head
        if head.next.next is None:
            p=head.next
            p.next=head
            head.next=None
            return p
        else:
            p=head
            q=p.next
            p.next=q.next
            q.next=p
            head=q
        while p.next is not None  and p.next.next is not None:
            if p.next.next.next is not None:
                q=p.next
                r=q.next
                p.next=r
                q.next=r.next
                r.next=q
                p=p.next.next
            else:
                q=p.next
                p.next=q.next
                p.next.next=q
                q.next=None
                p=p.next.next

        return head 
            

阅读更多

没有更多推荐了,返回首页