在網上查找到的單鏈表試題

.逆向打印單鏈表

void printlistback(Node* head)

{

if (NULL == head)
    return;
printlistback(head->next);
printf("%d--->", head->data);

}

.刪除一個無頭單鏈表的非尾節點

void DeleteNotTailNode(Node* pos)
{

Node* Ppos = NULL;
assert(pos);
Ppos = pos->next;
pos->data = pos->next->data;
pos->next = pos->next->next;
free(Ppos);
Ppos = NULL;

}

.在無頭單鏈表的一個非頭節點前插入一個節點

void InsertNotHead(PNode pos,DataType data)
{

PNode PNewnode = NULL;
PNode _pos = pos;      assert(pos);
PNewnode = Buynode(data);
PNewnode->next = _pos->next;
_pos->next = PNewnode; 
_pos->data = _pos->next->data;
_pos->next = _pos->next->next;
free(PNewnode);

}

.單鏈表的逆置–前後指針

void Reverselist(Node** head)
{

assert(head);
Node* p = *head;
Node* nextnode = NULL;
Node* nownode = NULL;
if (p == NULL || p->next == NULL)
    return;
while (p)
{
    nownode = p;
    p = p->next;
    nownode->next = nextnode;
    nextnode = nownode;
}
(*head)->next = NULL;
*head = nownode;

}

.單鏈表的逆置–頭插法

void Reverselist(Node** head)
{

Node* p = NULL;
Node* q = NULL;
p=head->next;
head->next=NULL;
while(p)
{
    q=p;
    p=p->next;
    q->next=head->next;
    head->next=q;
}

}

.查找單鏈表的中間節點

Node* FindMidNode(Node* pHead)
{

Node* fast = head;
Node* slow = head;
while(fast&&fast->next)
{
    fast = fast->next->next;
    slow = slow->next;
}
return slow;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章