mio4 Java Web & Web Security

反转链表

2018-08-27
mio4

阅读:


反转链表

题目描述 输入一个链表,反转链表后,输出新链表的表头。

分析

  • 注意代码的鲁棒性,考虑链表的三种情况
    • 链表为空
    • 链表只有一个元素,反转之后头节点不变
    • 链表有多个元素的一般情况
  • 使用三个指针记录pre now next:前驱节点、当前节点、后继节点,从左往右移动指针,直到链表末尾即可
    • 特别要注意preNode和nowNode的赋值顺序,不然会造成死循环
class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
public class Solution {
	public ListNode ReverseList(ListNode head) {
		ListNode reverseListHead = null; //针对空链表的情况进行初始化
		ListNode preNode = null; //头节点前面是null
		ListNode nowNode = head;
		while(nowNode != null){
			ListNode nextNode = nowNode.next;
			//处理链表只有一个节点的情况
			if(nextNode == null)
				reverseListHead = nowNode;
			//处理一般多节点的链表
			nowNode.next = preNode;
			preNode = nowNode;
			nowNode = nextNode;
		}
		return reverseListHead;
	}
}


Comments

Content