题目描述
输入一个链表,反转链表后,输出新链表的表头。
解题思路
头插法
具体代码
- C++
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution
{
public:
ListNode *ReverseList(ListNode *pHead)
{
ListNode *q, *pre;
q = pHead; //记录后继结点,防止断链
pre = NULL; //记录头结点位置(新链表表头)
while (pHead)
{
q = pHead->next; //q记录当前结点的后继结点
pHead->next = pre; //摘下当前结点插入新链表的表头
pre = pHead; //pre始终指向新链表的表头
pHead = q; //工作指针pHead后移
}
return pre;
}
};
- Java
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode q = null; //记录工作指针head的后继结点,防止断链
ListNode pre = null; //记录前驱结点(新新链表的表头)
while(head != null){
q = head.next;
head.next = pre;
pre = head;
head = q;
}
return pre;
}
}