文章来源:
个人博客 翔仔年轻有力量:反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
- 给定一个链表
- 将链表反转并输出
- 链表节点定义如下:
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
牛客网OJ原题链接:反转链表
思路方法
- 使用头插法,步骤如图
- 为了防止出现链表断裂等情况,链表重组的具体操作需仔细完善:
- 先借助辅助节点保存原头节点的下一个节点,即head.next
- 将原头节点指向新链表头节点的下一个节点,即pHead.next
- 将新链表头节点的下一个节点指向该头节点
- 头节点在旧链表后移,即赋予辅助节点的值
参考代码
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode pHead = new ListNode(-1);
while(head != null){
//辅助节点保存下一个节点
ListNode ogNext = head.next;
head.next = pHead.next;
pHead.next = head;
head = ogNext;
}
return pHead.next;
}
}
图片来源:牛客网@Cyc2018