题目分析:
给定一个单向链表,要求将所有的奇数位置的节点放到前面,如1->2->3->4->5->NULL,则进行变换后,得到的链表为1->3->5->2->4->NULL。
解题思路:
1)一遍遍历链表,将链表分为奇数链表和偶数链表
2)将1)中得到的奇数链表与偶数链表进行挂接,从而得到最终的奇偶链表。
实现程序
C版本
// 奇偶链表操作 struct ListNode *oddEvenList(struct ListNode *head) { // 奇数链表 struct ListNode *odd = (struct ListNode *) malloc (sizeof(struct ListNode)); // 偶数链表 struct ListNode *even = (struct ListNode *) malloc (sizeof(struct ListNode)); struct ListNode *odd1 = odd; struct ListNode *even1 = even; if (head == NULL || head->next == NULL || head->next->next == NULL) return head; struct ListNode *o = head; struct ListNode *e = head->next; // 循环分割出奇数链表和偶数链表 while (true) { odd1->next = o; odd1 = odd1->next; even1->next = e; even1 = even1->next; if (e != NULL) o = o->next->next; else break; if (o != NULL) e = e->next->next; else break; } // 处理奇数链表的尾部 if (o != NULL) { odd1->next = o; odd1 = odd1->next; } // 处理偶数链表的尾部 if (e != NULL) { even1->next = e; even1 = even1->next; } // 处理链表尾部,并将两个链表进行挂接 if (even1 != NULL) even1->next = NULL; odd1->next = even->next; return odd->next; }
leetcode_328 Odd Even Linked List
最新推荐文章于 2024-05-21 00:10:56 发布