LeetCode 反转链表(代码注释超详细!)
程序员文章站
2024-03-17 22:08:58
...
题目描述:
反转一个单链表。
题目链接:原题链接
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
方法1:头插法
题目分析: 这个是一个非常简单的反转一个单链表,最简单最容易想到的方法就是通过循环遍历得到每个元素然后通过头插法重新插入链表中,从而实现链表倒转的目的。
代码解释:理解的核心我认为是理解当前节点和逻辑头结点的关系,当前节点的下一节点指向逻辑头结点的下一个结点,然后逻辑头结点的下一节点指向当前节点
java实现代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
//我们可以使用头插法将每个元素重新插入链表中,这样就可以实现链表的反转,实现逆序
//实现头插法
ListNode tempHead = new ListNode(0);
tempHead.next = null;
ListNode q = new ListNode(0);//创建一个新的节点来保存当前节点
q.next = null;
while(head!= null){
q= head.next;//保存节点
//将结点重新插入,当前节点的下一个结点指向逻辑结点的下一个结点
head.next = tempHead.next;
//逻辑头结点的下一个结点指向当前节点
tempHead.next = head;
//完成了一次头插法后,当前节点往后移
head = q;
}
return tempHead.next;
}
}
上一篇: Swift: 常用的Extension
下一篇: Hibernate各类概念总结