题目描述:
题解:
1.通过slow fast指针找到链表中间位置。
2.对后半部分链表进行反转。
3.将前半部分链表和反转后的后半部分进行交叉。
尝试一(使用链表长度作为终止判断,未通过)链表节点为偶数正确,奇数结果不正确。
class Solution(object):
def reorderList(self, head):
head1 = head
length = 0
while head1:
length = length + 1
head1 = head1.next
print(length)
slow = head
fast = head
while fast.next and fast.next.next:
slow = slow.next
fast = fast.next.next
print(slow)
def reverse(head):
pre = None
cur = head
nxt = head.next
while nxt:
cur.next = pre
pre = cur
cur = nxt
nxt = cur.next
cur.next = pre
return cur
cur = reverse(slow.next)
print(cur)
print(head)
newhead = ListNode()
nowlength = 0
while True:
newhead.next = head
head = head.next
newhead = newhead.next
nowlength = nowlength + 1
print(nowlength)
print(newhead)
if nowlength == length:
return newhead.next
newhead.next = cur
cur = cur.next
newhead = newhead.next
nowlength = nowlength + 1
print(nowlength)
if nowlength == length:
return newhead.next
尝试二:
class Solution(object):
def isPalindrome(self, head):
if head==None or head.next==None:
return True
if head.next.next ==None:
return head.val==head.next.val
half1 = head
slow = head
fast = head
while fast.next and fast.next.next:
fast = fast.next.next
slow = slow.next
def reversed(head):
if head == None:
return head
pre = None
cur = head
nxt = cur.next
while nxt:
cur.next = pre
pre = cur
cur = nxt
nxt = nxt.next
cur.next = pre
return cur
half2 = reversed(slow.next)
print(slow)
while half2.next:
if half1.val != half2.val:
return False
half1 = half1.next
half2 = half2.next
return half1.val == half2.val
版权声明:本文为laurasam原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。