- 算法
- 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 }