- 算法
- 1.双指针
- 2.先保存奇数头节点和偶数头节点(避免引用中的属性发生变化)
- 3.一个引用指向奇数节点,一个引用指向偶数节点,开始往后处理结点指向
- 4.结束的条件是,偶数节点不为null且偶数节点的next不为null
- 5.最后将偶数头节点挂到奇数链表尾节点
public ListNode oddEvenList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode oddHead = head;
ListNode evenHead = head.next;
ListNode oddCurr = oddHead;
ListNode evenCurr = evenHead;
while (evenCurr != null && evenCurr.next != null) {
oddCurr.next = evenCurr.next;
oddCurr = oddCurr.next;
evenCurr.next = oddCurr.next;
evenCurr = evenCurr.next;
}
oddCurr.next = evenHead;
return head;
} func oddEvenList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
oddHead, evenHead := head, head.Next
oddCurr, evenCurr := oddHead, evenHead
for evenCurr != nil && evenCurr.Next != nil {
oddCurr.Next = evenCurr.Next
oddCurr = oddCurr.Next
evenCurr.Next = oddCurr.Next
evenCurr = evenCurr.Next
}
oddCurr.Next = evenHead
return oddHead
}