题目:
题目链接:反转链表
题目内容:给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
题解:
方法1:迭代
代码:java语言
public static ListNode listNodeReverse(ListNode head){
ListNode curr = head;//获取传入链表的头结点
ListNode prev = null;//定义一个ListNode用于存放已经反转过的部分的头结点
while (curr != null){//分别将链表中的每一个节点(从第一个开始)按顺序作为当前节点进行以下迭代操作
ListNode next = curr.next;//取出当前节点的下一个节点存入next
curr.next = prev;//将上次迭代中已经反转过的部分的头结点连在当前节点后面
prev = curr;//将此次迭代反转过的部分保存到prev中,用于下一次迭代
curr = next;//将当前节点的下一节点赋值为当前节点,用于下一次迭代
}
return prev;
}
调用验证:
class ListNode {
int val;
ListNode next;
ListNode(int x){val = x;}
}
public class Test {
public static ListNode listNodeReverse(ListNode head){
ListNode curr = head;//获取传入链表的头结点
ListNode prev = null;//定义一个ListNode用于存放已经反转过的部分的头结点
while (curr != null){//分别将链表中的每一个节点(从第一个开始)按顺序作为当前节点进行以下迭代操作
ListNode next = curr.next;//取出当前节点的下一个节点存入next
curr.next = prev;//将上次迭代中已经反转过的部分的头结点连在当前节点后面
prev = curr;//将此次迭代反转过的部分保存到prev中
curr = next;//将当前节点的下一节点赋值为当前节点,用于下一次迭代
}
return prev;
}
public static void main(String[] args) {
ListNode head=new ListNode(0);
ListNode firstNode = new ListNode(1);
ListNode secondNode = new ListNode(2);
ListNode thirdNode = new ListNode(3);
head.next=firstNode;
firstNode.next = secondNode;
secondNode.next = thirdNode;
System.out.println("firstNode的下一节点为:");
System.out.println(firstNode.next.val);
listNodeReverse(head);//执行反转方法
System.out.println("firstNode的下一节点为:");
System.out.println(firstNode.next.val);
}
}
main方法的执行结果为:
执行结果显示,链表翻转之前
方法2:递归(待做)
代码:
自己学习记一下笔记