创建一个双向链表或双向循环链表

#include <stdio.h>
#include <stdlib.h>
#define len sizeof(struct list)
struct list
{
	int x;
	struct list *pre,*next;
};
struct list * create()//创建链表并返回链表头的指针
{
	struct list *p,*p1,*head;
	head=p=(struct list *)malloc(len);
	p->pre=NULL;//1.第一个元素没有直接前驱
	scanf("%d",&p->x);
	int n=0;
	while(p->x!=-1)
	{
		if(n==0)
			n++;
		else//搞清楚就很明白看清。建议在纸上画画
			p1->next=p,p->pre=p1;
		p1=p;
		p=(struct list *)malloc(len);
		scanf("%d",&p->x);
	}
	p1->next=NULL;//2.最后一个元素没有直接后继
//	p1->next=head,head->pre=p1; //如果1 2 行代码删除 这样写 就是双向循环链表了吧 哈哈
	return head;
}
int main()
{
	struct list *l1;
	printf("请输入链表A,以-1结束:");
	l1=create();
	printf("\n");
	while(l1!=NULL)
	{
		printf("%d ",l1->x);
		l1=l1->next;
		if(l1!=NULL)
		printf("%d ",l1->pre->x);
	}
	printf("\n");
	return 0;
}


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
创建一个双向循环链表,你可以使用C++中的类来实现。下面是一个简单的示例代码: ```cpp #include <iostream> using namespace std; // 双向循环链表节点类 class Node { public: int data; Node* prev; Node* next; }; // 双向循环链表类 class DoublyLinkedList { private: Node* head; public: // 构造函数 DoublyLinkedList() { head = nullptr; } // 在链表尾部插入节点 void insert(int value) { // 创建新节点 Node* newNode = new Node(); newNode->data = value; if (head == nullptr) { // 如果链表为,将新节点设为头结点 newNode->prev = newNode; newNode->next = newNode; head = newNode; } else { // 将新节点插入到链表尾部 Node* tail = head->prev; tail->next = newNode; newNode->prev = tail; newNode->next = head; head->prev = newNode; } } // 打印链表 void display() { if (head == nullptr) { cout << "链表为" << endl; return; } Node* current = head; do { cout << current->data << " "; current = current->next; } while (current != head); cout << endl; } }; int main() { DoublyLinkedList dll; dll.insert(1); dll.insert(2); dll.insert(3); dll.display(); return 0; } ``` 在上述代码中,我们定义了一个`Node`类来表示双向循环链表的节点,包含节点的数据、指向前一个节点的指针`prev`和指向后一个节点的指针`next`。 然后,我们定义了`DoublyLinkedList`类来表示双向循环链表,其中包含一个指向头结点的指针`head`。在该类中,我们实现了一个`insert`方法来插入新节点到链表尾部,并且处理了链表为和非的情况。还实现了一个`display`方法来打印链表中的所有节点。 在`main`函数中,我们创建了一个`DoublyLinkedList`对象`dll`,并在其中插入一些节点,然后调用`display`方法打印链表中的节点值。 这样就完成了一个简单的双向循环链表创建和打印。你可以根据需要在该基础上添加其他操作,如删除节点、查找节点等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值