分割错误



我是编程新手。我写了下面的程序来交换两个连续的数字在一个列表使用链表。如。1 2 3 4 5 6将显示为2 1 4 3 6 5。但事实证明,在编译时没有错误,但当这段代码运行时,它没有提供所需的更新。有人能帮我一下吗?

#include <iostream>
using namespace std;
struct node{
    int data;
    node *next;
};

int main(){
    node* head;
    head=NULL;
    node *temp= new node;
    temp->data=1;
    temp->next=NULL;
    head=temp;
    int p=2;
    while(p%6!=0){
        node* temp1= new node;
        temp1->data=p;
        temp1->next=NULL;
        temp->next=temp1;
        temp=temp->next;
        p++;
    }
    node* t1=new node;
    t1=head;
    while(t1!=NULL){
        cout<<t1->data<<endl;
        t1=t1->next;
    }
    t1=head;
    node* t2=new node;
    t2=t1->next;
    cout<<p;
    while(t1!=NULL || t1->next!=NULL){
        p=t1->data;
        cout<<p;
        t1->data=t2->data;
        t2->data=p;
        t1=t1->next->next;
    }
    t1=head;
    while(t1!=NULL){
        cout<<t1->data<<endl;
        t1=t1->next;
    }
    return 0;
}

使用这个循环

while(p%6!=0){
    node* temp1= new node;
    temp1->data=p;
    temp1->next=NULL;
    temp->next=temp1;
    temp=temp->next;
    p++;
}

你将不会得到数据等于6的节点:)当p等于6时,循环将不会迭代。

在这些语句中存在内存泄漏

node* t1=new node;
t1=head;

,因为你首先将新分配的内存地址分配给t1,然后用head重新分配。

同样的错误存在于以下语句

node* t2=new node;
t2=t1->next;

这个循环中有不正确的条件

while(t1!=NULL || t1->next!=NULL){

必须有

while(t1!=NULL && t1->next!=NULL){

while(t1!=NULL && t2!=NULL){

同样在循环体中,不能重新赋值t2。

下面是一个示例,它与您正在尝试做的相同

#include <iostream>
#include <algorithm>
struct node
{
    int data;
    node *next;
};
int main() 
{
    node *head = NULL;
    node **tmp = &head;
    for ( int i = 1; i <= 6; i++ )
    {
        *tmp = new node { i, NULL };
        tmp = &( *tmp )->next;
    }
    for ( tmp = &head; *tmp; tmp = &( *tmp )->next  )
    {
        std::cout << ( *tmp )->data << ' ';
    }
    std::cout << std::endl;
    for ( tmp = &head; *tmp && ( *tmp )->next; tmp = &( *tmp )->next->next )
    {
        std::swap( ( *tmp )->data, ( *tmp )->next->data );
    }
    for ( tmp = &head; *tmp; tmp = &( *tmp )->next  )
    {
        std::cout << ( *tmp )->data << ' ';
    }
    std::cout << std::endl;
    tmp = &head;
    while ( *tmp )
    {
        node *current = *tmp;
        tmp = &( *tmp )->next;
        delete current;
    }
    return 0;
}

输出为

1 2 3 4 5 6 
2 1 4 3 6 5 

相关内容

  • 没有找到相关文章

最新更新