记录一下链表的操作
这是曾经一道面试题
链表的考察更侧重于代码的书写和思路的形成。虽然说,链表的结构简单,但是涉及到指针的操作,容易引申出一些挑战性的考题,其中也牵涉到诸多小的细节的考虑,更能看出代码书写的能力和功底。
废话不多说上图分析加代码
反转后:
Status ListReverse(LinkList &L)
{/*链表逆序*/
if(L==NULL||L->next==NULL)
return -1;
LNode* pNext = L->next->next;
LNode* pNode = L->next;
LNode* pTemp = L->next->next->next; // 指向所处理的节点的下一个节点
LNode* pFirst = L->next; // 记录原链表的第一个节点,即逆转后的尾节点
// 每次处理两个节点
while(pNode->next && pNext)
{
pNext->next = pNode; // 迭代逆转的两个节点是 pnext pnode
pNode = pNext;
pNext = pTemp;
if(pTemp!=NULL)
pTemp = pTemp->next;
else
;
}
L->next = pNode; // 头节点指向新的第一个元素节点
pFirst->next = NULL; // 尾节点置为NULL
return 1;
}