考察的知识点:分割链表、修改节点的指针指向;
解答方法分析:
- 创建两个新的链表节点
small
和large
,作为分割后的链表的头节点。 - 使用两个指针
sHead
和lHead
分别指向small
和large
的初始位置,以便最后返回结果。 - 遍历原始链表
head
,若当前节点的值小于x
,则将其连接到small
链表的末尾,并更新指针small
。否则,将其连接到large
链表的末尾,并更新指针large
。 - 遍历完成后,将
large
链表的末尾指向NULL
,并将small
链表的末尾连接到large
链表的开头,即small->next = lHead->next
。 - 最后返回
sHead->next
,即分割后的链表的头节点。
所用编程语言:C++;
完整编程代码:↓
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @param x int整型 * @return ListNode类 */ ListNode* cow_partition(ListNode* head, int x) { ListNode* small = new ListNode(0); ListNode* sHead = small; ListNode* large = new ListNode(0); ListNode* lHead = large; while (head) { if (head->val < x) { small->next = head; small = small->next; } else { large->next = head; large = large->next; } head = head->next; } large->next = NULL; small->next = lHead->next; return sHead->next; } };