双链表(一)

双链表头节点,数据节点的创建

单链表的创建会了之后,双链表也很容易就会,只是多了一个指针指向前面一个节点。

头节点的创建

#include<iostream>
using namespace std;
struct node
{
    int a;
    struct node *next;  //指向下一个节点的指针
    struct node *pre;  //指向上一个节点的指针
};
int main()
{
    node *head;  //指向头节点的指针
    node *p;
    p = new node;  //这里用new代替malloc,都可以用来分配内存空间
    p->next = NULL; //还没有数据节点,因此全为NULL
    p->pre = NULL;
    head = p;
    return(0);
}

创建数据节点有两种方法,一种是每次都在头节点后面创建,另一种就是每次在前一个数据节点后面创建

先看第一种

void node_creat(node *head, int n)
{
    node *p;
    int i;
    for (i = 1; i <= n; i++)
    {
        p = new node;
        cin >> p->a;
        p->next = head->next;
        head->next = p;
        if (p->next != NULL)    //这里需要判断头节点后面是否有数据节点
            p->next->pre = p;//如果有就让它的pre指针指向新插入的节点
        p->pre = head;//新插入的节点的pre指向头节点
    }
}

//既然是插入新节点的时候是判断头节点后面是否有新的数据节点
//那么为什么是p->next!=NULL而不是head->next!=NULL
//因为前面head->next已经赋值给p->next

第二种

void node_creat(node *head, int n)
{
    node *p;
    node *q;  //q用来指向每次创建好的数据节点
    q = head;
    int i;
    for (i = 1; i <= n; i++)
    {
        p = new node;
        cin >> p->a;
        p->next = q->next;
        q->next = p;
        p->pre = q;
        q = q->next;
    }
}

 

转载于:https://www.cnblogs.com/hzb1224/p/11401801.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Python代码,实现双链表一元一次方程相加: ```python class Node: def __init__(self, coefficient, power): self.coefficient = coefficient self.power = power self.next = None self.prev = None class LinkedList: def __init__(self): self.head = None self.tail = None def add_node(self, coefficient, power): new_node = Node(coefficient, power) if self.head is None: self.head = new_node self.tail = new_node else: current = self.head while current is not None and current.power > power: current = current.next if current is None: new_node.prev = self.tail self.tail.next = new_node self.tail = new_node elif current.power == power: current.coefficient += coefficient elif current.prev is None: new_node.next = self.head self.head.prev = new_node self.head = new_node else: new_node.next = current new_node.prev = current.prev current.prev.next = new_node current.prev = new_node def __str__(self): current = self.head result = '' while current is not None: result += '{}x^{} + '.format(current.coefficient, current.power) current = current.next return result[:-3] def add_equations(eq1, eq2): result = LinkedList() node1 = eq1.head node2 = eq2.head while node1 is not None and node2 is not None: if node1.power > node2.power: result.add_node(node1.coefficient, node1.power) node1 = node1.next elif node1.power < node2.power: result.add_node(node2.coefficient, node2.power) node2 = node2.next else: result.add_node(node1.coefficient + node2.coefficient, node1.power) node1 = node1.next node2 = node2.next while node1 is not None: result.add_node(node1.coefficient, node1.power) node1 = node1.next while node2 is not None: result.add_node(node2.coefficient, node2.power) node2 = node2.next return result eq1 = LinkedList() eq1.add_node(3, 2) eq1.add_node(2, 1) eq1.add_node(1, 0) print(eq1) eq2 = LinkedList() eq2.add_node(4, 3) eq2.add_node(1, 1) eq2.add_node(2, 0) print(eq2) eq3 = add_equations(eq1, eq2) print(eq3) ``` 上述代码定义了一个`Node`类和一个`LinkedList`类,`Node`类表示一个双链表节点,包含系数和指数两个属性,以及指向前一个节点和后一个节点的指针;`LinkedList`类表示一个双链表,包含头节点和尾节点两个属性,以及添加节点和打印链表的方法。`add_node`方法实现了按指数从高到低的顺序添加节点的功能,如果指数相同则合并同类项。 `add_equations`方法接受两个一元一次方程的链表作为参数,遍历这两个链表,并对相同指数的节点进行系数相加的操作,最后返回一个新的链表。 在代码的最后,我们创建了两个链表`eq1`和`eq2`,分别表示$3x^2+2x+1$和$4x^3+x^1+2$两个一元一次方程,然后将它们相加,并打印出相加后的链表`eq3`,表示$4x^3+3x^2+3x+3$的一元一次方程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值