82. Remove Duplicates from Sorted List II
- 判断:当前节点存在且下一个节点和当前节点的值相等
- 如果相等,则扫描每一个值相等的节点,找到值相等的最后一个节点。扫描完成后,pred指向最后一个相等值节点的下一个节点
- 如果当前节点和下一个节点的值不相等,则pred向后移动
- head向后移动
class Solution(object):
def deleteDuplicates(self, head):
dummy = ListNode(0)
dummy.next = head
# predecessor = the last node before the sublist of duplicates
pred = dummy
while head:
if head.next and head.val == head.next.val:
while head.next and head.val == head.next.val:
head = head.next
pred.next = head.next
else:
pred = pred.next
head = head.next
return dummy.next
328. Odd Even Linked List
- 既然要将奇节点和偶节点分开,那就使用两个哑元节点dummy1和dummy2来串起来,使用odd和even两个扫描指针保存相应的节点。dummy1用于保存奇节点
- 如果下一个偶节点还存在的话,则head继续移动,否则退出循环
- 将dummy2记录的偶链表接到奇链表后面
- 返回dummy1指向的头节点
class Solution(object):
def oddEvenList(self, head):
dummy1 = odd = ListNode(0)
dummy2 = even = ListNode(0)
while head:
odd.next = head
even.next = head.next
odd = odd.next
even = even.next
head = head.next.next if even else None
odd.next = dummy2.next
return dummy1.next