给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
L=ListNode(0)
L.next=head
s1=L
SS=ListNode(0)
ss=SS #在链表操作时,备一个副本,做最后的输出
a1=s1.next
if a1==None:
return []
a2=s1.next.next
while a1!=None or a2!=None:
if a1==None:
break #因为a2也为None,不用操作了
if a2==None:
bb1=ListNode(a1.val) #新建一个结点储存这个值
ss.next=bb1 #把这个节点分配给ss.next
break
bb1=ListNode(a2.val)
ss.next=bb1
ss=ss.next #更新结点为下一个节点,即到现在bb1的这个节点
bb1=ListNode(a1.val)
ss.next=bb1 #这里的next指的是分配下一个新节点给bb1
ss=ss.next #相当于指针指到新bb1这个节点
s1=s1.next.next #更新值
a1=s1.next
if a1==None: #如果无法更新,说明结束
break
a2=s1.next.next
return SS.next #返回副本的.next
28ms,只击败了48%
下次可尝试通过改变链表.next来做
第一次的代码
永远超出时间限制,赋值不对,这里a1=s1.next,a1就是一个链表啊,怎么会为None呢,所以,只能换成a1.val,就是当前节点了,那么,用新的ListNode(a1.val)来把这个值变成节点
a1=s1.next
a2=s1.next.next
while a1!=None or a2!=None:
if a1==None:
break
if a2==None:
ss.next=a1
break
ss.next=a2
ss=ss.next
ss.next=a1
ss=ss.next
s1=s1.next.next
a1=s1.next
a2=s1.next.next
return SS.next