指针的选择排序的问题

问题遇到的现象和发生背景

一个按姓名的选择排序,寻求解决一下
/*ElemType tmp = p->data;
p->data = pMax->data;
pMax->data = tmp;
*/
倒数第四行注释部分如何不用data的交换,用指针的指向操作实现

问题相关代码,请勿粘贴截图

void SortName(DuLinkList* plist)
{
assert(plist != NULL);
DuLNode* p = plist->head->next; // first;
while (p->next != plist->head)
{
DuLNode* pMax = p;
DuLNode* pos = p->next;
while (pos != plist->head)
{
if (strcmp(pMax->data.a_name, pos->data.a_name) > 0)
{
pMax = pos;
}
pos = pos->next;
}

    if (p != pMax)
    {
        /*ElemType tmp = p->data;
        p->data = pMax->data;
        pMax->data = tmp;
        */
    }
    p = p->next;
}

}

运行结果及报错内容

需要改进 ,更快,冗余少

我的解答思路和尝试过的方法

无法解答

我想要达到的结果

想寻求解决代码