题目分析:
给定一个单向链表,要求将所有的奇数位置的节点放到前面,如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-11-05 16:27:01 发布
本文介绍了一种在单向链表中将所有奇数位置节点置于前面的技术。通过一次遍历将链表拆分为奇数链表和偶数链表,再将两者重新连接起来。适用于需要对链表进行特定顺序调整的场景。

509

被折叠的 条评论
为什么被折叠?



