1.方法一:找一个cur与tmp分别指向head和head->next,然后将cur->next变成tmp->next,然后将此时的第二个结点指向现在的head,接下来就将tmp后移,此时完成的相当于就是将原来的head->next,变成了现在的头,原来的head变成了现在的第二个结点,然后重复上述动作就可以在不创建空间的前提下,逆置链表。
代码图:
void SListReverse(SList
* plist
)
{
assert(plist
);
SListNode
* cur
= plist
->_head
;
SListNode
* tmp
= plist
->_head
->_next
;
while (tmp
)
{
cur
->_next
= tmp
->_next
;
tmp
->_next
= plist
->_head
;
plist
->_head
= tmp
;
tmp
= cur
->_next
;
}
}
2.方法二:将链表的每一个结点直接断链,然后反着指过来就行了,相当于将一排人反过来站着,位置就完成了逆置
void SListReverse1(SList
* plist
)
{
assert(plist
);
SListNode
* cur
= plist
->_head
;
SListNode
* tmp
= plist
->_head
->_next
;
cur
->_next
= NULL;
while (tmp
)
{
plist
->_head
= tmp
;
tmp
= tmp
->_next
;
plist
->_head
->_next
= cur
;
cur
= plist
->_head
;
}
}
转载请注明原文地址: https://mac.8miu.com/read-509450.html