OJ链表之建立顺序链表

133728_avpO_2654147.png

#include<stdio.h>
#include<stdlib.h>
struct node
{
    int data;
    struct node *next;
};
struct node *creat(int n)
{
    struct node *head,*p,*tail;
    int i;
    head=(struct node *)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
        for(i=1;i<=n;i++)
        {
            p=(struct node *)malloc(sizeof(struct node));
            scanf("%d",&p->data);
            p->next=NULL;
            tail->next=p;
            tail=p;
        }
      return  (head) ;
};
int main()
{
    int n;
    struct node  *head,*t;

    scanf("%d",&n);
    head=creat(n);
    t=head;
    while(t->next!=NULL)
    {
        if(t->next->next==NULL)
            printf("%d",t->next->data);
        else printf("%d ",t->next->data);
        t=t->next;
    }
    return 0;
}

转载于:https://my.oschina.net/mjtao20150609/blog/652014

### 关于 XMUOJ 平台上的链表加法题目及其解题思路 #### 链表加法的核心概念 链表加法是一种常见的算法问题,通常涉及两个存储字的单向链表相加,并返回一个新的表示其和的链表。这类问题的关键在于处理进位逻辑以及链表节点的操作[^1]。 #### 数据结构的选择 在解决此类问题时,可以选用单向链表作为数据结构的基础形式。每个节点包含两部分:`val` 表示当前节点所存值,`next` 指针指向下一个节点。例如,在 Python 中定义如下: ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next ``` #### 进位机制实现 当执行链表加法时,需特别注意进位操作。如果某一位的结果大于等于 10,则应将其减去 10 后放入该位置的新节点中,并将进位值传递到下一次计算中。 以下是基于上述描述的一个通用解决方案框架: ```python def addTwoNumbers(l1: ListNode, l2: ListNode) -> ListNode: dummy_head = ListNode(0) current_node = dummy_head carry_over = 0 while l1 or l2 or carry_over != 0: value_l1 = (l1.val if l1 else 0) value_l2 = (l2.val if l2 else 0) total_sum = value_l1 + value_l2 + carry_over carry_over = total_sum // 10 new_digit = total_sum % 10 current_node.next = ListNode(new_digit) current_node = current_node.next if l1 is not None: l1 = l1.next if l2 is not None: l2 = l2.next return dummy_head.next ``` 此函通过遍历输入链表 `l1` 和 `l2` 的每一个节点来完成逐位求和的过程,同时考虑到了可能存在的额外进位情况。 #### 测试用例设计 为了验证程序正确性,可构建几个典型测试场景,比如正常长度匹配、不同长度列表间的运算等情形下的表现评估。 #### 总结 综上所述,针对 XMUOJ 上有关链表加法类别的竞赛题目解答策略主要围绕着如何有效管理指针移动进位控制展开讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值