有如下链表
反转之后
解题思路:
1)链表头节点保持不动,第一个节点要变成链表的最后一个节点;
2)着重分析第一个节点,在 1 节点的指针域设为NULL 的时候,先保存 1节点的NEXT 节点,然后用 priorNode节点指 向 1 节点,这样在遍历到2节点的时候,2节点的指针域就可以指向 priorNode 也就是 1 节点,以此类推
3)总结:定义三个变量分别指向前一个节点、当前节点、下一个节点。
public ListNode reverseListNode(ListNode head) {
/** 判断下链表是否为空 */
if (null == head)
return null;
/** 获取第一个节点 */
ListNode currentNode = head.getNext();
/** 上一个节点 */
ListNode priorNode = null;
/** 下一个节点 */
ListNode nextNode = null;
while(null != currentNode) {
nextNode = currentNode.getNext();
/** 让当前节点的指针指向上一个节点, */
currentNode.setNext(priorNode);
priorNode = currentNode;
currentNode = nextNode;
}
head.setNext(priorNode);
return head;
}
数据结构
/**
* 单链表
*/
public class ListNode {
private int val;
private ListNode next;
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public ListNode getNext() {
return next;
}
public void setNext(ListNode next) {
this.next = next;
}
}