要对头结点进行操作时,考虑创建哑节点dummy,使用dummy->next表示真正的头节点。这样可以避免处理头节点为空的边界问题。
1.给定一个链表和x,对链表排序使所有小于x的节点出现在大于或等于x的节点的前面。
代码如下:
#include <iostream>
using namespace std;
/*
链表之哑节点的使用
2-17-8-22
*/
struct ListNode{
int value;
ListNode *next;
ListNode(int x){ value = x; }
};
//排序:小与x都在大于或等于x的前面
ListNode *reorderXList(ListNode *head, int x)
{
ListNode *newhead = NULL;
ListNode *aDummy = new ListNode(0);
ListNode *aCurr = aDummy;
ListNode *bDummy = new ListNode(0);
ListNode *bCurr = bDummy;
while (head)
{
ListNode *next = head->next;
head->next = NULL;
if (head->value < x)
{
aCurr->next = head;
aCurr = head;//后移
}
else
{
bCurr->next = head;
bCurr = head;
}
head = next;
}
aCurr->next = bDummy->next;//连接起来
newhead = aDumm