#include <iostream>
using namespace std;
typedef struct node{
int data;
struct node *next;
}Node;
//怎么样把一个链表掉个顺序
node * convert( Node * head ) {
if( head == NULL ) {
printf( "empty list!\n");
return NULL;
}
else {
int node_num = 0;
Node *p , *q , *r;
p = head;
q = p -> next;
if( q != NULL ) {
r = q -> next;
}
p -> next = NULL;
//p指向已经被逆序的那一段的第一个节点,q指向待逆序的第一个节点,r是为了更新q而设置的
while( q != NULL ) {
q -> next = p;
p = q;
q = r;
if( q ) {
r = q -> next;
}
}
return p;
}
}
node * init_list( ) {
int i;
Node *t;
Node * p = ( Node * ) malloc( sizeof( Node ) );
p -> next = NULL;
t = p;
for( i = 0 ; i < 10 ; i ++ ) {
Node * q = ( Node * ) malloc( sizeof( Node ) );
q -> data = i;
q -> next = NULL;
p -> next = q;
p = q;
}
p = t -> next;
free( t );
return p;
}
void output_list( Node * head ) {
Node *p = head;
while( p != NULL ) {
printf( "%d" , p -> data );
p = p -> next;
}
printf( "\n" );
}
int main() {
node *head = NULL;
head = init_list( );
output_list( head );
head = convert( head );
output_list( head );
return 0;
}
如何把链表逆序
最新推荐文章于 2024-04-10 10:42:05 发布