#include<stdio.h>
#include<malloc.h>
typedef struct ListNode
{
int data;
struct ListNode *next;
}Node;
Node *BuySlistNode(int x)
{
Node *NewNode = (Node*)malloc(sizeof(Node));
NewNode->data = x;
NewNode->next = NULL;
return NewNode;
}
void ListPushBack(Node **pphead, int x)
{
if (*pphead == NULL)
{
Node *NewNode = BuySlistNode(x);
*pphead = NewNode;
}
else
{
Node *tail = *pphead;
while (tail->next != NULL)
{
tail = tail->next;
}
Node *NewNode = BuySlistNode(x);
tail->next = NewNode;
}
}
void SListPrintf(Node *phead)
{
Node *cur = phead;
while (cur->next!= NULL)
{
printf("%d ", cur->data);
cur = cur->next;
}
printf("%d", cur->data);
printf("\n");
}
void reverseList(Node** head){
if (*head == NULL || (*head)->next == NULL)//链表为空 或者 一个结点
{
;
}
else//一个以上个结点
{
Node *n1 = NULL, *n2 = *head, *n3 = (*head)->next;
while (n2 != NULL)
{
//反转
n2->next = n1;//最重要的一步,其他各步都是围绕“完成这一步并且不影响下一次操作”而进行;
//迭代
n1 = n2;
n2 = n3;
if (n2 != NULL)
{
n3 = n3->next;
}
}
*head = n1;
}
}
int main()
{
Node *head = NULL;
int x;
while (~scanf("%d", &x))
{
char ch = getchar();
if (ch == '#')
{
break;
}
ListPushBack(&head, x);
}
reverseList(&head);
SListPrintf(head);
return 0;
}
3.线性表逆置
最新推荐文章于 2024-03-29 00:07:41 发布