题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路一:非递归
*head为空时,直接返回null;
*head为当前结点,pre为当前结点的前一结点,next为当前结点的下一结点。
*pre结点可以反转指向,但反转之后如果不用next结点保存next结点的话,链表就断开了
*循环:
先用next保存下一个结点的信息,保证单链表不会因为失去head结点的原next结点而就此断裂;
保存完next,可以让head从指向next变成指向pre
head指向pre后,就继续依次反转下一个结点
让pre、head、next依次向后移动一个结点,继续下一次的指针反转。
*如果head为null的时候,pre就为最后一个结点,但是链表已经反转完毕,pre就是反转后链表的第一个结点。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if (head==null) return null;
ListNode pre=null;//初始化对象
ListNode next=null;
while(head!=null){
next=head.next;
head.next=pre;
pre=head;
head=next;
}
return pre;
}
}
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if pHead==None:
return None
pre=None//直接定义;nextnode使用时再定义;
while(pHead):
nextnode=pHead.next
pHead.next=pre
pre=pHead
pHead=nextnode
return pre