当前位置: 代码迷 >> 综合 >> 链表--Dummy Node小技巧(2)重排序一个给定链表
  详细解决方案

链表--Dummy Node小技巧(2)重排序一个给定链表

热度:54   发布时间:2024-01-20 03:10:38.0

Dummy Node小技巧:重排序一个给定链表

题目:给定一个链表和值x,重排序这个链表,使得小于x的值在大于等于x的值的前面。

分析:可以考虑先把小于x的值组成一个链表,大于等于x的值组成一个链表,然后再合并这两个链表即可。

那么这样的话,两个链表的头是不确定的,这个时候就自然要考虑用Dummy Node,由于是两个链表头,

所以用两个Dummy Node。代码如下:

ListNode *partition(ListNode *head,int val)
{//为空或者只有一个,那么直接返回原链表if(head == NULL || head->next == NULL)return head;ListNode *leftDummy = new ListNode(0);ListNode *rightDummy = new ListNode(0);ListNode *left = leftDummy;ListNode *right = rightDummy;ListNode *node = head;while(node != NULL){if(node->val < x){//left等于leftDummy的时候,那么下面第一句执行后表示leftDummy->next就是小值链表的头left->next = node;//left指向此刻小值链表的尾部left = left->next;           }else{//right等于rightDummy的时候,那么下面第一句执行后表示rightDummy->next就是大值链表的头right->next = node;//right指向此刻大值链表的尾部right = right->next;}//node指向下一个节点node = node->next;}//小值链表的最后一个指向大值链表的头left->next = rightDummy->next;//大值链表的尾部指向NULLright->next = NULL;//返回小值链表的头return leftDummy->next;
}

 

  相关解决方案