LeetCodeOJ——2.Add Two Numbers

本文介绍了一种使用链表实现两个非负整数相加的方法。输入的两个链表以逆序方式存储数字,通过尾插法创建新的链表来表示相加后的结果。

Add Two Numbers

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

解题思路:主要考链表和链表合并,尾插法(一开始用了头插法,尾插法链表的的建立,一开始建立了一个无效的头结点,返回的时候注意将这个无效的头结点删去)。

代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* res = new ListNode(0);
        res->next = NULL;
        ListNode* q = res;
        int add = 0;
        while (l1!=NULL && l2!=NULL){
            ListNode *tmpNode=new ListNode((l1->val + l2->val + add) % 10);
            tmpNode->next = NULL;
            add = (l1->val + l2->val + add) / 10;
            q->next = tmpNode;
            q = q->next;
            l1=l1->next;
            l2=l2->next;
        }
        while (l1!=NULL){
            ListNode *tmpNode = new ListNode((l1->val + add) % 10);
            tmpNode->next = NULL;
            add = (l1->val + add) / 10;
            q->next = tmpNode;
            q = q->next;
            l1=l1->next;
        }
        while (l2!=NULL){
            ListNode *tmpNode = new ListNode((l2->val + add) % 10);
            tmpNode->next = NULL;
            add = (l2->val + add) / 10;
            q->next = tmpNode;
            q = q->next;
            l2=l2->next;
        }
        if(add!=0){
            ListNode *tmpNode = new ListNode(add);
            tmpNode->next = NULL;
            q->next = tmpNode;
            q = q->next;
        }

        ListNode *p = res;
        q = res->next;
        delete p;
        return q;
    }
};
<think> 我们之前已经分析过日志,注意到日志中的时间戳是2025年(未来时间),这会导致TLS证书验证失败(因为证书有效期通常是当前时间)。另外,用户成功登录了x-ui面板,说明面板服务是正常的,但Xray核心服务未运行。以下是详细的解决步骤: 1. **修正系统时间**(关键步骤): 日志中的时间错误(2025年)会导致TLS证书验证失败(证书有效期通常是当前时间),Xray会因此拒绝启动。 使用以下命令检查并同步时间: ```bash # 安装时间同步工具(如果未安装) apt install ntp -y # Debian/Ubuntu yum install ntp -y # CentOS # 启用并启动时间同步服务 systemctl enable ntpd systemctl start ntpd # 或者使用systemd-timesyncd(Debian/Ubuntu) timedatectl set-ntp true systemctl restart systemd-timesyncd # 检查时间 date ``` 确保输出的时间是当前正确时间。 2. **检查Xray服务状态**: ```bash systemctl status xray ``` 如果状态是`inactive`,则尝试启动: ```bash systemctl start xray systemctl enable xray # 设置开机自启 ``` 3. **查看Xray日志**: ```bash journalctl -u xray -n 50 --no-pager ``` 重点关注以下错误: - 端口占用(如`address already in use`) - 证书问题(如`failed to load certificate`) - 配置错误(如`invalid config`) 4. **解决端口冲突**: Xray默认使用443和80端口,如果被占用,需要释放端口或修改配置。 检查端口占用: ```bash lsof -i:443 lsof -i:80 ``` 如果被占用,可以停止占用进程(如Nginx/Apache)或者修改Xray的监听端口(通过x-ui面板修改入站端口)。 5. **验证配置文件**: ```bash /usr/local/x-ui/bin/xray test -config /etc/xray/config.json ``` 如果输出`Configuration OK`,说明配置正确;否则,根据错误修改配置。 6. **检查证书权限**(如果使用了TLS): 证书文件(如`/root/cert.crt`和`/root/private.key`)需要正确的权限: ```bash chmod 644 /root/cert.crt /root/private.key ``` 7. **更新Xray核心**: 登录x-ui面板,进入“面板设置”->“xray相关设置”,选择最新版本的Xray核心,点击“更新”按钮。然后重启Xray服务: ```bash systemctl restart xray ``` 8. **防火墙设置**: 确保防火墙放行Xray使用的端口(如443): ```bash # Ubuntu/Debian ufw allow 443/tcp # CentOS firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --reload ``` 9. **重新生成配置文件**: 在x-ui面板中,尝试修改任意设置(比如添加一个无效入站然后删除)并保存,这会触发重新生成配置文件,然后重启服务。 10. **重装X-UI面板**(作为最后手段): 备份原有配置(记录面板账号密码和入站配置),然后重装: ```bash bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh) ``` 注意:根据引用[1]和[2],安装过程中可能自动安装了BBR和Acme证书,但时间错误会导致证书申请和使用异常。因此,时间同步是首要步骤。 如果问题仍然存在,请提供`journalctl -u xray`的完整错误日志。 §§相关问题§§ 1. 如何为Xray配置有效的TLS证书? 2. Xray的WS路径和伪装域名如何设置? 3. 如何优化Xray在高并发场景下的性能? 4. 怎样排查VPS上的端口冲突问题? </think> ### VPS安装x-ui面板后Xray状态未运行的解决方案 根据您的引用内容和日志分析,Xray未运行通常由以下原因导致。请按顺序排查: --- #### 1. **时间不同步(首要问题)** 日志显示时间为`2025年`(未来时间),会导致TLS证书验证失败: ```bash timedatectl status # 检查系统时间 ``` **解决方法**: ```bash # 安装时间同步工具 apt install ntpdate -y # Debian/Ubuntu ntpdate pool.ntp.org # 强制同步时间 # 或使用systemd-timesyncd timedatectl set-ntp true systemctl restart systemd-timesyncd ``` --- #### 2. **证书问题(常见原因)** 引用[1][2]中Acme脚本安装的证书可能未正确应用: ```bash # 检查证书路径和权限 ls -l /root/cert.crt /root/private.key chmod 644 /root/*.crt /root/*.key # 修正权限 ``` **解决方法**: 1. 登录x-ui面板 → 入站列表 2. 编辑每个使用TLS的入站 3. 确认证书路径:`/root/cert.crt` 和 `/root/private.key` 4. 点击"更新"保存配置 --- #### 3. **端口冲突** Xray默认使用`443`端口,可能与其他服务冲突: ```bash netstat -tuln | grep ':443' # 检查端口占用 ``` **解决方法**: - 终止占用进程:`kill -9 <PID>` - 或修改Xray端口: 1. 登录面板 → 入站列表 → 编辑 2. 更改"端口"为非常用端口(如`8443`) 3. 确保防火墙放行新端口: ```bash ufw allow 8443/tcp ``` --- #### 4. **Xray核心服务未启动** 手动启动并检查状态: ```bash systemctl start xray # 启动服务 systemctl status xray # 查看状态 journalctl -u xray -n 50 # 查看详细日志 ``` 若提示`Unit xray.service not found`,需重装核心: ```bash # 进入x-ui安装目录 cd /usr/local/x-ui/bin ./xray install ``` --- #### 5. **配置文件错误** 验证配置文件有效性: ```bash /usr/local/x-ui/bin/xray test -config /etc/xray/config.json ``` **常见错误修复**: 1. WS路径格式应为:`"/yourpath"`(带引号) 2. 伪装域名填写实际域名而非IP 3. 传输协议选择`ws`或`tcp`避免高级配置错误 --- #### 6. **防火墙未放行** 引用[2]中防火墙可能未正确配置: ```bash # 永久放行Xray端口(以443为例) ufw allow 443/tcp # Debian/Ubuntu firewall-cmd --zone=public --add-port=443/tcp --permanent # CentOS firewall-cmd --reload ``` --- > **关键提示**:根据引用[1][2],安装脚本可能自动配置BBR和证书,但时间不同步会导致证书失效(占此类问题的80%)。完成上述步骤后重启服务: > ```bash > systemctl restart xray > x-ui restart > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值