206-反转链表

leetcode题解——反转链表

题目如下

反转一个单链表。

解题思路

  1. 如果为空链表,直接返回
  2. 否则,设置两个指针p和q,用来辅助结点摘除和指向下一节点
    1. 首先将第一个结点的指针域置空
    2. 用q来指示当前操作的结点,重复以下动作
      1. p指向q的下一个结点,防止断链
      2. 将结点q置为链表的第一个结点
      3. 改变head指针,使head始终指向链表的头结点
      4. q指向下一个待操作的结点

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

//链表反转
struct ListNode* reverseList(struct ListNode* head){
    if(head==NULL){
        return head;
    }else{
        struct ListNode*p=head;
        struct ListNode*q=head->next;
        p->next=NULL;
        while(q){
            p=q->next;
            q->next=head;
            head=q;
            q=p;
        }
        return head;
    }

}

posted @ 2021-03-05 17:56  平平无奇的打工人  阅读(42)  评论(0)    收藏  举报