#include <string.h>
#include <iostream>
#include <stack>
struct ListNode
{
int value;
ListNode* next;
};
void AddToList(ListNode** pHead, int value)
{
ListNode* node = new ListNode;
node->value = value;
node->next = NULL;
if (*pHead == NULL)
{
*pHead = node; //当头结点为空时,新插入的结点就是链表的头指针。但是由于会改动头指针,因此必须把pHead参数设为指向指针的指针。否则这个函数的pHead仍然是一个空指针。
}
else
{
ListNode* p = *pHead;
while (p->next != NULL)
{
p = p->next;
}
p->next = node;
}
}
void RmoveNode(ListNode** pHead, int value)
{
if (pHead == NULL || *pHead == NULL)
return;
ListNode* pToBeDelete = NULL;
if ((*pHead)->value == value)
{
pToBeDelete = *pHead;
*pHead = (*pHead)->next;
}
else
{
ListNode* p = *pHead;
ListNode* q = p->next;
if (q == NULL)
return;
while (q->value != value && q->next != NULL)
{
q = q->next;
p = p->next;
}
if (q->value == value)
{
pToBeDelete = q;
p->next = q->next;
}
}
if (pToBeDelete != NULL)
{
delete pToBeDelete;
pToBeDelete = NULL;
}
}
void printReversely(ListNode* pHead)
{
if (pHead == NULL)
return;
stack<int> stk;
ListNode* p = pHead;
while (p != NULL)
{
stk.push(p->value);
p = p->next;
}
while(!stk.empty())
{
printf("%d\t", stk.top());
stk.pop();
}
}
void printReverselySelf(ListNode* pHead)
{
if (pHead == NULL)
return;
else if (pHead->next == NULL)
printf("%d\t", pHead->value);
else
{
printReverselySelf(pHead->next);
printf("%d\t", pHead->value);
}
}
{
ListNode* head = NULL;
int i;
for (i = 0; i < 10; i++)
{
AddToList(&head, i);
}
ListNode* p = head;
while (p != NULL)
{
printf("%d\t", p->value);
p = p->next;
}
printReversely(head);
printReverselySelf(head);
RmoveNode(&head, 0);
p = head;
while (p != NULL)
{
printf("%d\t", p->value);
p = p->next;
}
return 0;
}