首页 > 其他分享 >剑指offer:反转链表

剑指offer:反转链表

时间:2022-12-01 19:03:26浏览次数:44  
标签:head ListNode offer 反转 next 链表 pHead ppre NULL


题目描述

输入一个链表,反转链表后,输出链表的所有元素。

1.非递归

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {

if (pHead == NULL){
return NULL;
}

ListNode* ppre = NULL;
ListNode* p = pHead;
ListNode* pnext = NULL;

while (p != NULL){

//可以整合在一起
pnext = p->next;
p->next = ppre;
ppre = p;
p = pnext;

/*
if (p == pHead){
pnext = p->next;
p->next = NULL;
ppre = p;
}
else{
pnext = p->next;
p->next = ppre;
ppre = p;
}
p = pnext;*/

}

return ppre;
}
};


2.递归

  递归的实现方式主要有4步:

    1)如果head为空,或者只有head这一个节点,return head即可;

    2)先遍历head->next为首的链表,得到一个头结点newHead;

    3)把head赋值给head->next->next, head->next为空;

    4)返回newHead。


    下图也说明了上述步骤:

剑指offer:反转链表_链表



/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {

if (pHead == NULL || pHead->next==NULL){
return pHead;
}
else{
ListNode * newHead = ReverseList(pHead->next);
pHead->next->next = pHead;
pHead->next = NULL;
return newHead;
}

}
};

类似题目

 


标签:head,ListNode,offer,反转,next,链表,pHead,ppre,NULL
From: https://blog.51cto.com/u_15899184/5903617

相关文章

  • 剑指offer:栈的压入、弹出序列
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该......
  • 剑指offer:二叉搜索树与双向链表
    题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。1.递归/*structTreeNode{intval;s......
  • 剑指offer:二叉树中和为某一值的路径
    题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。/***Definiti......
  • 剑指offer:数组中出现次数超过一半的数字
    题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因......
  • 剑指offer:复杂链表的复制
    题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。/*structRandomListNode{intlabel;structRandom......
  • 剑指offer:数组中的逆序对
    题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。classSolution{public:intInv......
  • 剑指offer:最小的K个数
    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。方法一O(n)改变输入,适合小数据classSolution{public:vector<i......
  • 剑指offer:翻转单词顺序列
    题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“s......
  • 删除有序链表中的重复元素(python)
    重复的留下一个def deleteDuplicates(self , head: ListNode) -> ListNode:        # write code here        #空链表        if ......
  • 链表的奇偶重排
    思路:变成数组操作def oddEvenList(self , head: ListNode) -> ListNode:        # write code here        p = head        num......