#include<stdio.h>
#include<malloc.h>
typedef struct LNode {
int data;
struct LNode *next;
}LNode, LinkList;
int CreateListNode(LinkList *head)
{
if (head == NULL)
return 0;
int n;
printf("请输入要创建的单链表的长度:");
scanf("%d", &n);
LinkList *p = head; //p一直指向链表的末尾,用来遍历链表
if (n == 0)
return -1;
for (int i = 0; i<n; i++)
{
int number;
printf("请输入第%d个值:", i + 1);
scanf("%d", &number);
LNode *s = new LNode; //定义一个s节点用来存放每次要输入的值
s->data = number;
s->next = NULL;
p->next = s;
p = s;
}
}
LinkList *reverse(LinkList *head)
{
LinkList *p;
LinkList *q;
p = head->next;
q = p->next;
p->next = NULL;
while (q != NULL)
{
p = q->next;
q->next = head->next;
head->next = q;
q = p;
}
return head;
}
LinkList *show(LinkList *head)
{
LinkList *p;
p = head->next;
if (p == NULL)
{
printf("Empty\n");
return head;
}
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return head;
}
/*void divide(LinkList*L1)
{
int flag=0;
LinkList *L2;
LinkList *L3;
LinkList *p=L1->next;
LinkList *r1,*r2,*q,*t;
L2=(LinkList*)malloc(sizeof(LinkList));
L3=(LinkList*)malloc(sizeof(LinkList));
r1=L2;
r2=L3;
L2->next=NULL;
L3->next=NULL;
while(p)
{
flag++;
if(flag%2==1)
{
q=(LinkList*)malloc(sizeof(LinkList));
q->data=p->data;
q->next=NULL;
L2->next=q;
}
if(flag%2==0)
{
t=(LinkList*)malloc(sizeof(LinkList));
t->data=p->data;
t->next=NULL;
L3->next=t;
}
}
show(L2);
show(L3);
}*/
LinkList *Divide(LinkList*head1)
{
int count = 0;
LNode *head2;
head2 = (LNode*)malloc(sizeof(LNode));
LNode*r = head2;
LNode*pre = head1;
LNode *p = pre->next;
while (p)
{
if (count % 2 ==0)
{
pre = p;
p = p->next;
}
else
{
pre->next = p->next;
r->next = p;
r = p;
p = pre->next;
}
count++;
}
r->next = NULL;
return head2;
}
int main()
{
LinkList *L = new LinkList;
LNode *head;
L->next = NULL;
CreateListNode(L);
show(L);
printf("倒置后:");
reverse(L);
show(L);
printf("拆分数组\n");
head = Divide(L);
printf("odd:");
show(L);
printf("even:");
show(head);
}
单链表的创建,倒置以及奇偶位的拆分
最新推荐文章于 2023-03-18 14:48:30 发布