c语言反转一个单链表。

Definition for singly-linked list.

  • struct ListNode {
  • int val;
    
  • struct ListNode *next;
    
  • };
  • /
    struct ListNode* reverseList(struct ListNode* head){

}

就是要求是要运用函数来做,函数里面怎么写就很迷糊
输入:1->2->3->4->5->NULL
输出:5->4->3->2->1->NULL

逐个节点的内容进行交换,进行n-1遍就可以了

struct ListNode* reverseList(struct ListNode* head)
{
  if(head == NULL)
     return head;
  struct ListNode *p = head;
  struct ListNode *t = NULL;
  while(head != t)
  {
    p = head;
    struct ListNode *q = p->next;
    while(q != t)
    {
      int v = p->val;
      p->val = q->val;
      q->val = v;
      p = q;
      q = q->next;
    }
    t = p;
  }
  return head;
}