剑指offer15 反转链表(java实现)

题目

定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

思路

反转链表,需要调整结点的next指针,例如a->b->c,需要调整为a<-b<-c,只要将当前结点的next指针指向前一结点即可,如b->next=a,需要一个变量来保存前一结点;
但调整当前结点的next指针之后,就无法获取原链表的下一结点了,因此需要一个临时变量来保存当前结点的下一结点。
依次遍历整个链表,调整每个结点的next指针,最后返回原链表的最后一个结点指针即可。

代码

//节点类
public class Node {
    protected Node next; // 指针域
    protected int data;// 数据域

    public Node(int data) {
        this.data = data;
    }

    public static void main(String[] args) {

    }

    public static Node reverseListNode(Node head) {
        if (head == null || head.next == null) {// 单链表为空或只有一个节点,直接返回原单链表
            return head;
        }
        Node preNode = null;// 前一个节点指针
        Node curNode = head;// 当前节点指针
        Node nextNode = null;// 下一个节点指针
        while (curNode != null) {
            nextNode = curNode.next;// nextNode 指向下一个节点
            curNode.next = preNode;// 将当前节点next域指向前一个节点
            preNode = curNode;// preNode 指针向后移动
            curNode = nextNode;// curNode指针向后移动
        }
        return preNode;
    }
}

猜你喜欢

转载自www.cnblogs.com/Imfondof/p/10628268.html
今日推荐