反转链表
记录下,脑壳疼。。
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode next=null;
while(head!=null){
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}
}
拿题目中的实例来说:1->2->3->4->5->null
第一次遍历 | |
---|---|
head | true |
next | head为1,head.next为2 |
head.next | pre为null,head.next=null(1->null) |
pre | pre=1->null |
head | head=2 |
第二次遍历 | |
---|---|
head | true |
next | head为2,head.next为3 |
head.next | pre为(1->null),head.next=1(2->1->null) |
pre | pre=2->1->null |
head | head=3 |
第三次遍历 | |
---|---|
head | true |
next | head为3,head.next为4 |
head.next | pre为(2->1->null),head.next=1(3->2->1->null) |
pre | pre=3->2->1->null |
head | head=4 |
第四次遍历 | |
---|---|
head | true |
next | head为4,head.next为5 |
head.next | pre为(3->2->1->null),head.next=1(4->3->2->1->null) |
pre | pre=4->3->2->1->null |
head | head=5 |
第四次遍历 | |
---|---|
head | true |
next | head为5,head.next为null |
head.next | pre为(4->3->2->1->null),head.next=1(5->4->3->2->1->null) |
pre | pre=5->4->3->2->1->null |
head | head=null |
第五次遍历,head已经为null,停止遍历,返回pre。此时链表已经反转。
原文始发于微信公众号(阿黄学编程):反转链表分析
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/35625.html