ZBLOG

使用c++单链表的其他编写思路重新编写以实现该代码的输出要求 #ifndef NULL #define NULL 0 #endif #include using namespace std; //定义单链表结点结构 struct LNode { int data; LNode* next; LNode() {}; LNode(int e, LNode* n = NULL) :data(e), next(n) {}; }; //单链表list类创建 class...

重新编写的代码如下所示:

#include<iostream>
using namespace std;

//定义单链表结点结构
struct ListNode {
    int data;
    ListNode* next;

    ListNode(int val) : data(val), next(nullptr) {}
};

//单链表类创建
class LinkedList {
private:
    ListNode* head;
public:
    //构造函数
    LinkedList() : head(nullptr) {}

    //析构函数
    ~LinkedList() {
        ListNode* curr = head;
        while (curr) {
            ListNode* temp = curr;
            curr = curr->next;
            delete temp;
        }
    }

    //头插法
    void insert(int value) {
        ListNode* newNode = new ListNode(value);
        if (head == nullptr) {
            head = newNode;
        } else {
            newNode->next = head;
            head = newNode;
        }
    }

	//在指定位置插入元素
	void insert(int index, int value)
	{
		if (index < 1 || index > size()+1)
			return; // 无效的插入位置,直接返回

		ListNode** curr = &head;

		for (int i = 1; i < index; ++i) 
			curr = &((*curr)->next);

		ListNode* newNode = new ListNode(value);
		newNode->next = *curr;
		*curr = newNode;
	}

	int size()
	{
	    int count=0;
	    ListNode* curr=head;

	    while(curr)
	    {
	        ++count;
	        curr=curr->next;
	    }

	    return count;  
	    
	  }


	void printList()
	  {

	      ListNode *temp=head;


	      while(temp!=nullptr)
	      {


	          cout<<temp->data<<" ";

	          temp=temp->next;
	      }
	      cout<<endl;

	  }



    void swap(int x, int y) {
        if (x < 0 || x > size() || y < 0 || y > size()) {
            cout << "error" << endl;
            return;
        }

        ListNode** currX = &head;
        for (int i = 0; i < x; ++i)
            currX = &((*currX)->next);
        
        ListNode** currY = &head;
        for (int i = 0; i < y; ++i)
            currY = &((*currY)->next);

        ListNode* tempX = *currX;
        *currX = (*currX)->next;

        ListNode* tempY = *currY;
        *currY = (*currY)->next;

        tempX->next = tempY->next;
        tempY->next = tempX;
    }
};

int main() {
    LinkedList list;
    int n, a;
    cin >> n;

    for (int i = 0; i < n; ++i) {
        cin >> a;
        list.insert(i + 1, a);
    }

    list.printList();

    int t;
	cin >> t;

	for (int i = 0; i < t; ++i) {
	    int x, y;
	    cin >> x >> y;

	    list.swap(x, y);

	    list.printList();
	}

	return 0;
}

这个版本使用了更清晰的类名和成员函数命名,并且修正了一些代码逻辑错误。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=9364

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?