是单链表方向逆转
用指针操作。。。
用while循环操作
如果用C++的类和对象表示,我再追加50分
请用C++写一个函数,这个函数使单链表方向逆转
答案:3 悬赏:40
解决时间 2021-02-03 06:26
- 提问者网友:无悔疯狂
- 2021-02-02 23:02
最佳答案
- 二级知识专家网友:短发女王川岛琦
- 2021-02-02 23:52
我这个程序行不行?
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
struct _Node *next;
int val;
} Node;
void reverseNodes(Node *node)
{
if (node->next == NULL)
{
return;
}
else
{
reverseNodes(node->next);
node->next->next = node;
}
}
void reverseList(Node *node)
{
reverseNodes(node);
node->next = NULL;
}
void printList(Node *node)
{
while (node)
{
printf("%d-->", node->val);
node = node->next;
}
printf("end\n");
}
int main(void)
{
Node n1, n2, n3, n4;
n1.next = &n2;
n1.val = 1;
n2.next = &n3;
n2.val = 2;
n3.next = &n4;
n3.val = 3;
n4.next = NULL;
n4.val = 4;
reverseList(&n1);
printList(&n4);
return 0;
}
你是要折腾我吧?
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
struct _Node *next;
int val;
} Node;
void reverseList(Node *head)
{
Node *node = head;
int i, num = 0;
Node **array;
while (node)
{
node = node->next;
num++;
}
array = (Node **)malloc(sizeof(Node *) * num);
i = 0;
node = head;
while (node)
{
array[i] = node;
node = node->next;
i++;
}
for (i = 0; i < num; i++)
{
if (i == 0)
{
array[i]->next = NULL;
}
else
{
array[i]->next = array[i - 1];
}
}
}
void printList(Node *node)
{
while (node)
{
printf("%d-->", node->val);
node = node->next;
}
printf("end\n");
}
int main(void)
{
Node n1, n2, n3, n4;
n1.next = &n2;
n1.val = 1;
n2.next = &n3;
n2.val = 2;
n3.next = &n4;
n3.val = 3;
n4.next = NULL;
n4.val = 4;
reverseList(&n1);
printList(&n4);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
struct _Node *next;
int val;
} Node;
void reverseNodes(Node *node)
{
if (node->next == NULL)
{
return;
}
else
{
reverseNodes(node->next);
node->next->next = node;
}
}
void reverseList(Node *node)
{
reverseNodes(node);
node->next = NULL;
}
void printList(Node *node)
{
while (node)
{
printf("%d-->", node->val);
node = node->next;
}
printf("end\n");
}
int main(void)
{
Node n1, n2, n3, n4;
n1.next = &n2;
n1.val = 1;
n2.next = &n3;
n2.val = 2;
n3.next = &n4;
n3.val = 3;
n4.next = NULL;
n4.val = 4;
reverseList(&n1);
printList(&n4);
return 0;
}
你是要折腾我吧?
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
struct _Node *next;
int val;
} Node;
void reverseList(Node *head)
{
Node *node = head;
int i, num = 0;
Node **array;
while (node)
{
node = node->next;
num++;
}
array = (Node **)malloc(sizeof(Node *) * num);
i = 0;
node = head;
while (node)
{
array[i] = node;
node = node->next;
i++;
}
for (i = 0; i < num; i++)
{
if (i == 0)
{
array[i]->next = NULL;
}
else
{
array[i]->next = array[i - 1];
}
}
}
void printList(Node *node)
{
while (node)
{
printf("%d-->", node->val);
node = node->next;
}
printf("end\n");
}
int main(void)
{
Node n1, n2, n3, n4;
n1.next = &n2;
n1.val = 1;
n2.next = &n3;
n2.val = 2;
n3.next = &n4;
n3.val = 3;
n4.next = NULL;
n4.val = 4;
reverseList(&n1);
printList(&n4);
return 0;
}
全部回答
- 1楼网友:湫止没有不同
- 2021-02-03 02:02
主函数中i.linklist(g[10],5);改为i.linklist(g,5);数组调用时用数组名
- 2楼网友:哭不代表软弱
- 2021-02-03 00:45
#include<iostream>
using namespace std;
struct LNode
{
int num;
LNode *next;
};
LNode* func(LNode *head)
{
LNode *pf,*pm,*pl;
pf=head;
if(pf)
if(pm=pf->next)
{
while(pm)
{
pl=pm->next;
pm->next=pf;
pf=pm;
pm=pl;
}
head->next=NULL;
}
return pf;
}
void main()
{
LNode *t,*head=NULL,*pos;
for(int i=0;i<5;++i)
{
t=new LNode;
cin>>t->num;
if(!head){head=t;pos=head;}
else {pos->next=t;pos=t;}
}
pos->next=NULL;
pos=head;
while(pos)
{
cout<<pos->num<<" ";
pos=pos->next;
}
cout<<endl;
head=func(head);
pos=head;
while(pos)
{
cout<<pos->num<<" ";
pos=pos->next;
}
cout<<endl;
}
////////////////
下面这个是递归函数,用这个函数替换上面的func()函数即可运行,其它地方不用改
LNode* func(LNode *head)
{
LNode *p;
if(head)
if(head->next)
{
p=func(head->next);
head->next->next = head;
head->next=NULL;
return p;
}
else return head;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯