ZBLOG

使用c++代码实现以下要求 在日常生活中,有一些列表,比如待办清单或者歌单,我们经常会遇到一个需求,就是改变项目的顺序。一般来说,我们选中需要移动的条目,然后将它拖到我们想要的位置就可以啦! Pulpit rock 今天我们就使用单链表来实现这样一个功能吧! 先用C++实现含头结点的单链表,然后实现单链表中元素位置的移动。 注意不能改变每个结点包含的数据,必须通过修改指针来实现位置调换。 Input 第一行输入整数 n,表示链表中有n个数据; 第二行依次输入 n个数据,中间用空格分隔; 第...

下面是使用C++实现含头结点的单链表,并实现单链表中元素位置移动的代码:

#include <iostream>
using namespace std;

// 定义单链表节点
struct ListNode {
    int data;
    ListNode* next;
};

// 创建含头结点的单链表
ListNode* createLinkedList(int n) {
    ListNode* head = new ListNode;  // 头结点
    ListNode* p = head;
    
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        
        ListNode* newNode = new ListNode;
        newNode->data = num;
        newNode->next = NULL;
        
        p->next = newNode;
        p = p->next;
    }
    
    return head;
}

// 打印单链表
void printLinkedList(ListNode* head) {
    if (head == NULL || head->next == NULL)
        return;

    ListNode* p = head->next;

    while (p != NULL) {
        cout << p->data << " ";
        p = p->next;
    }

    cout << endl;
}

// 移动节点位置
void moveNode(ListNode* head, int currentPos, int targetPos) {
    if (head == NULL || head->next == NULL)
        return;

    if (currentPos <= 0 || targetPos <= 0)
        return;

    // 找到当前位置和目标位置的前一个节点
    ListNode *p1_prev, *p2_prev, *p1, *p2;
    
    p1_prev = head; 
	p2_prev = head; 

	for(int i=0;i<currentPos-1;i++)
	{
		p1_prev=p1_prev->next;
	}
	p1=p1_prev->next;

	for(int i=0;i<targetPos-1;i++)
	{
		p2_prev=p2_prev->next;
	}
	p2=p2_prev->next;

    // 若当前位置和目标位置相同,则单链表的顺序不变
    if (p1 == p2)
        return;

    // 进行节点位置调换
    p1_prev->next = p1->next;
    p1->next = p2_prev->next;
    p2_prev->next = p1;
}

int main() {
    int n;  // 链表中数据个数
    cin >> n;

    ListNode* head = createLinkedList(n);

    cout << "Original List: ";
    printLinkedList(head);

	int t;  // 移动次数
	cin >> t;

	cout << "Result:" << endl;

	for(int i=0;i<t;i++)
	{
		int currentPos, targetPos;
		cin >> currentPos >> targetPos;

		moveNode(head, currentPos, targetPos);
		
        printLinkedList(head);
	}

	return 0;
}

希望能够帮助到你!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?