题目
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
思路
反转链表,需要调整结点的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; } }