【代码的鲁棒性】反转链表

此题出自牛客网的剑指offer专题

题目描述

输入一个链表,反转链表后,输出新链表的表头。

题目分析:

这一道题算是一道比较经典的题目了。为了实现链表翻转,我们需要使用一个结点指针(在Java中因为没有指针,所以我们可以使用引用)以及记录下一个结点的指针来记录链表中的前一个结点以及后一个结点,这里为了方便以及书写代码时逻辑清晰点,我又使用了指向当前结点的指针以及顾名思义的newHead指针。

代码如下:

Java版本:

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head==null){
            return null;
        }
        ListNode preNode = null;
        ListNode nextNode = null;
        ListNode currentNode = head;
        ListNode newHead = null;
        while(currentNode != null){
            nextNode = currentNode.next;
            if(nextNode == null){
                newHead = currentNode;
            }
            currentNode.next = preNode;
            preNode = currentNode;
            currentNode = nextNode;
        }
        return newHead;
        
    }
}

C++版本:

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        ListNode* newHead = NULL;
        ListNode* preNode = NULL;
        ListNode* nextNode = NULL;
        ListNode* currentNode = pHead;
        while(currentNode){
            nextNode = currentNode->next;
            if(nextNode==NULL){
                newHead = currentNode;
            }
            currentNode->next = preNode;
            preNode = currentNode;
            currentNode = nextNode;
        }
        return newHead;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值