小渣渣的算法学习笔记:2018秋招备战
数据结构类算法总结:链表
数据结构类算法总结:链表
1.题目描述:
输入一个链表,反转链表后,输出新链表的表头。 定义3个指针分别指向当前结点,它的上一个结点,下一个结点
2.代码实现:
public class Solution24 { private static class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public static void main(String[] args) { ListNode l1 = new ListNode(5); ListNode l2 = new ListNode(3); ListNode l3 = new ListNode(2); ListNode l4 = new ListNode(6); ListNode l5 = new ListNode(8); ListNode l6 = new ListNode(9); l1.next = l2; l2.next = l3; l3.next = l4; l4.next = l5; l5.next = l6; Solution24 s = new Solution24(); ListNode n = s.ReverseList(l1); while(n!=null){ System.out.print(n.val+" "); n=n.next; } } public ListNode ReverseList(ListNode head){ ListNode reverseHead = null; ListNode pnode = head; ListNode prev = null; while(pnode != null){ ListNode pNext = pnode.next;//保存原始链表中当前结点的下一个结点,防止链表断开 if(pNext == null){ reverseHead = pnode;//反转后头结点是原始链表next为空的尾结点 } pnode.next = prev; prev = pnode; pnode = pNext; } return reverseHead; } }